2017-03-03 3 views
2

Ich brauche eine schnelle Hilfe.Ergebnis zurück nach Formular einreichen

Ich möchte, dass Benutzer eine CSV-Datei hochladen können. Dann mache ich etwas Parsing und sinnvolle Dinge mit der Datei auf der Rückseite. Schließlich zeigen Sie die Ergebnisse den Benutzern zurück. Wenn sie die Datei hochladen, möchte ich überprüfen, ob die Dateigröße < = 250 KB ist oder < = 1000 Zeilen enthält.

In JSP:

<form action="/Project/CSVUpload" method="post" enctype="multipart/form-data"> 
<br /> 
<input id="uploadfilebutton" type="file" name="file" class="tss-btn tss-btn-blue" accept=".csv" required /> 
<br /> 
<input id="processfilebutton" type="submit" value="Process File" class="tss-btn tss-btn-blue" /> 
</form> 

So gibt es eine Upload-Button und eine Absenden-Button. Wie kann ich einen Status zurückbekommen, nachdem Benutzer auf die Senden-Schaltfläche geklickt haben? Zum Beispiel, wenn der Prozess fehlschlägt, möchte ich eine Popup-Fehlermeldung anzeigen.

In JavaScript:

function process() 
{ 
$.ajax({ 
    url:"/Project/CSVUpload", 
    type:'POST', 
    contentType: 'application/json', 
    dataType: 'json', 
    success:function(soapContents){ 

     if (soapContents.haserrors) 
     { 
      BootstrapDialog.show({ 
       title: 'Process File Failed', 
       message: soapContents.returnmessage, 
       buttons: [ { 
        label: 'Ok', 
        action: function(dialogItself){ 

         dialogItself.close(); 
        } 
       }] 
      }); 
     } 

    } 
}); 
} 

Dies funktioniert, wenn ich Form nicht verwenden. Das Formular ist erforderlich, weil enctype so sein muss.

In Java:

@WebServlet("/CSVUploads") 
public class CSVUpload extends HttpServlet 
{ 

public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, java.io.IOException 
{ 
boolean hasErrors = false; 
if (CSVUpload success) // assume we get the info from CSVUpload class 
{ 
    hasErrors = true; 
} 
if (hasErrors) 
    { 
     log.error("CSVUpload: "+returnMessage); 

     // Setup JSON response. 
     JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder(); 
     jsonObjectBuilder.add("haserrors", hasErrors); 
     jsonObjectBuilder.add("returnmessage", returnMessage); 
     JsonObject jsonObject = jsonObjectBuilder.build(); 

     // Write the JSON out as a response. 
     PrintWriter printWriter = response.getWriter(); 
     printWriter.print(jsonObject); 
     printWriter.flush(); 
    } 
} 

So habe ich einige Änderungen und fügen Sie eine neue Java-Klasse, um die Ajax-Abfrage zu handhaben ... es legt zweimal, zuerst vorlegen wird, um die Form Informationen bekommen und zweiten einreichen für prüft ein Erfolg ... Ich weiß nicht, ob jemand eine bessere Idee hat, aber das ändere ich, damit es funktioniert. Es klingt nicht gut, aber es funktioniert jetzt. Wenn jemand eine bessere Idee hat, lass es mich wissen, ein funktionierendes Beispiel wird großartig sein.

+0

change type = "submit" zu type = "button" wird die json return –

Antwort

1

Verwenden Sie die Schaltfläche anstelle von submit. Das liegt daran, dass die Eingabe des Absendentyps das Formular absendet, Sie aber auch die Anfrage mit Ajax senden. Das ist der Grund für zwei Anfragen.

+0

Okay, lass mich es versuchen. Danke für deine Antwort. –

+0

du meintest type = "button" nicht type = "submit" ... jetzt bekomme ich es ... danke –