0

Auf dem Click-Ereignis für die Schaltfläche "Senden" rufe ich eine js-Funktion auf, um die Eingabe des Benutzers abzurufen und zur Verarbeitung an den Server zu senden. Zur gleichen Zeit muss ich das Formular mit allen gefüllten Daten zusammen schicken. Ich setze <button type="button"> statt <button type="submit"> als wenn ich 'type' als submit setzen es erhält Fehler. Dort funktioniert die js fein, aber die Feldwerte werden von der Controller-Methode nicht abgerufen.Formular submit und Javascript-Funktion Aufruf Submit-Button Klicken Sie im Frühjahr mvc?

Wie kann ich das mit nur einem Knopf tun? Hier ist meine Handler-Methode in der Steuerung:

@RequestMapping(value = "/add_package") 
    public 
    @ResponseBody 
    ModelAndView addPackage(@ModelAttribute("newPackage") Package newPackage, 
          HttpServletRequest request) { 

     LOGGER.error("package objct {}",newPackage);// here I am getting objects with null values !! 

     String s = request.getParameter("test"); 
     LOGGER.trace("test val = {}", s); 

     ObjectMapper objectMapper = new ObjectMapper(); 
     List<Package> cats = null; 
     String pkgName = newPackage.getPackName(); 
     try { 

      ... 
     } catch (Exception e) { 
      .. 
      LOGGER.error("error in package add {}", e.getMessage()); 
     } 

     return new ModelAndView(new RedirectView("add")); 
    } 

Hier ist der jsp Code für Schaltfläche:

<form:button type="button" class="btn btn-success" id="btnAddNewPkg" onclick="contentPackge()"><span class="glyphicon glyphicon-plus"></span> 

hinzufügen

+0

können Sie die js Funktion teilen? Wie kommunizieren Sie mit dem Controller? Ajax verwenden? oder direkt abschicken? – brk

+0

@ user2181397 Ich benutze Ajax. Hier ist es. '$ .ajax ({ url:" https: // localhost: 8443/admin/packages/add_package ", daten: {" test ": JSON.stringify (jsonObj)}, // typ:" POST " , erfolg: funktion (ergebnis) { } }); ' – SMash

+0

versuchen, die url teil des codes und setzen sie url:" ./ add_package/" –

Antwort

0

Ich denke nicht, Sie url als https://localhost:8443/admin/packages/add_package stattdessen nur passieren müssen /add_package wird genug sein.

Neben Ihnen auch die url-pattern

Zweitens für Ajax-Antwort liefern müssen bin ich nicht sicher, warum Sie wieder ModelAndView brauchen. Sie können redirect Eigenschaft

erkunden Wenn Sie button = "Senden" verwenden, müssen Sie event.preventDefault() verwenden, um das Standardverhalten zu stoppen. Ich denke, mit button="button" wird gut funktionieren

+0

Diese Handlermethode wird zum Übermitteln von Details eines neuen Elements an die Datenbank verwendet. Und warum ich ein ModelAndView zurückgebe, soll dieselbe Ansichtsseite zur Verfügung stellen, die mit "add" url Muster abbildet.einfach muss ich sowohl diese Funktion aufrufen, um einige Werte zu erhalten und Formular auf die gleiche Schaltfläche klicken Ereignis – SMash

0

Sehen Sie sollten Formular senden, nachdem der Ajax erfolgreich aufgerufen wurde, dass in der Erfolgsfunktion von Ajax Sie manuell das Formular mit jquery.submit() -Funktion senden sollten. Andere weise es gewonnen ' Es kann die Funktion von Ajax stören. Oder Sie können die Funktion "Zeitverzögerung" nach dem Klicken auf die Schaltfläche "Senden" aktivieren.

dies eine unangenehme Art und Weise ist, es zu tun .i Sie die Funktion in Ajax-Erfolg einreichen rufen bevorzugen und Knopf halten als Taste

$("#target").submit(function(event) { 
    alert("Handler for .submit() called."); 
    event.preventDefault();showloadingif(); 
    setTimeout(function(){ $("#formId").submit(); }, 3000);   
}); 
+0

So muss ich den Button-Typ zu übermitteln? Kannst du bitte zeigen, wie man diese Zeitverzögerungsfunktion benutzt? – SMash

+0

Können Sie die Funktion showloadingif() ausführen? Was macht hier? – SMash