2016-04-09 9 views
0

ich eine Form wie diese haben (in einer Seite namens add.jsp):Weder BindingResult noch ebene Zielobjekt für Bohnen Namen nach umleiten

<form:form action="${pageContext.request.contextPath}/add" method="post" modelAttribute="addForm"> 
</form:form> 

Auf GET-Anfrage, ich bevölkern modelAttribute:

@RequestMapping(value ="add", method = RequestMethod.GET) 
    public ModelAndView add(Map<String, Object> model) { 

     model.put("addForm", new AddUserForm()); 
     return new ModelAndView("add"); 
    } 

Wenn ich das Formular abgesendet (a POST-Anforderung) durchführen, habe ich die Follow-Methode:

@RequestMapping(value ="add", method = RequestMethod.POST) 
public ModelAndView add(Map<String, Object> model, @Valid AddUserForm form, Errors errors) { 

    if (errors.hasErrors()) { 
     //model.put("addForm", new AddUserForm()); 
     return new ModelAndView("add"); 
    } 
    .... 
} 

Aber ich bekomme diese Fehlermeldung: Neither BindingResult nor plain target object for bean name 'addForm' available as request attribute

Meine Abhilfe ist es, model.put("addForm", new AddUserForm());, den Befehl, den ich auf POST-Anfrage kommentiert haben .... aber ... wo ist mein Fehler?

Antwort

1

In beiden Fällen geben Sie dieselbe Ansicht (d. H. "Add") zurück, und diese Ansicht enthält ein Formular mit modelAttribute="addForm", daher enthält das Modell MUST ein Objekt namens "addForm".

Wenn Sie wan't nicht Ihr Modell mit einem neuen AddUserForm nach einer POST zum Auffüllen mit Fehlern, werden Sie wahrscheinlich sollten:

  • Rückkehr eine andere Ansicht (ohne das „AddForm“ -Modell Attribut)

oder

  • Wiederverwendung der gleichen "AddForm": model.put("addForm", form);
+0

Ich habe den Code geändert, der das gleiche Modell zurückgibt und funktioniert. Aber auf diese Weise habe ich die Fehlervariable verloren? Weil ich eine Validierung für meine AddForm-Klasse habe (zum Beispiel @NotBlank (message = "E-Mail ist erforderlich") im E-Mail-Feld) aber meine add.jsp (wo ich ) zeige den Fehler nicht an. – Mistre83

+0

und was ist' model.put ("errors", errors); 'dann in der Ansicht Fehler anzeigen, wenn sie im Modell definiert sind. – ben75

+0

Sieht Beispiele im Netz Ich habe gesehen, dass Leute normalerweise nur eine Seite zurückgeben, ohne die Fehler im Modell hinzuzufügen (und ohne das Modell auch wieder zu senden) ... ich weiß nicht, warum für mich das alles nicht funktioniert :( – Mistre83

Verwandte Themen