2010-05-18 10 views
17

używam walidacji na podstawie adnotacji ale dla jednej z form nie jestem w stanie pokazać żadnych błędów za pomocą znacznika form:errors. Kiedy debugowania metody, widzę BindingResult ma błędów, ale z jakiegoś powodu jej nie są wyświetlane na formularzu. Jestem zaskoczony, jak mam to działa na innych formach, ale z jakiegoś powodu ta szczególna forma ma problemy. Wszelkie wskazówki są bardzo cenne.Wiosna 3 MVC - formularz: błędy nie pokazuje błędów

Oto kod ze sterownika, mam copyCartForm jako @SessionAttribute także w kontrolerze:

@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST) 
public String copyCart(@Valid CopyCart copyCartForm, BindingResult result) { 
    if (result.hasErrors()) { 
     logger.debug("errors in form" + result.toString()); 
     return "copyshoppingcart"; 
    } else { 
        ... 
        ... 
     return "redirect:/home"; 
    } 
} 

W JSP Próbowałem to:

<form:errors path="*" cssClass="formError"/> 

także jako:

<form:errors path="fieldName" cssClass="formError"/> 

Żadnych prac.

+0

Lepiej pokazać nam swój kod JSP:

@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST) public String copyCart(@Valid CopyCart copyCart, BindingResult result) { if (result.hasErrors()) { logger.debug("errors in form" + result.toString()); return "copyshoppingcart"; } else { ... ... return "redirect:/home"; } } 

ten musi również zostać zmieniony na tagu formularza. –

+2

musiałem użyć '@ ModelAttribute' uzyskać tej pracy. Tak więc formularz był poprzedzony '@ModelAttribute (" copyCartForm ") @Valid CopyCart copyCartForm, BindingResult result)' Nie wiesz dlaczego? W innych miejscach działa bez tego. – Eqbal

Odpowiedz

40

musiałem użyć @ModelAttribute uzyskać tej pracy. Zatem forma została poprzedzona @ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)

+7

To zadziałało dla mnie. Wygląda na to, że jeśli nazwa atrybutu modelu (copyCartForm) nie jest zgodna z nazwą klasy modelu (copyCart), należy ją określić jako parametr atrybutu @ModelAttribute. – Josh

+0

Hej! Dzięki, zajmuję się tym właśnie teraz, a moja bindingResult.hasErrors() nie wydaje się zwracać niczego, mimo że dodałem adnotacje na modelu, takie jak notnull itp. –

5

I w obliczu tego samego problemu.

musiałem użyć @ModelAttribute("attributeName"), aby uzyskać z powrotem w błąd sprawdzania poprawności odpowiedzi.

7

Jeszcze podejście, Jeśli z jakiegoś powodu nie można używać @ModelAttribute("copyCartForm") podczas korzystania śledź:

@RequestMapping(method=RequestMethod.POST) 
public String post(@Valid CopyCart copyCartForm, BindingResult bindingResult, ModelMap modelMap) { 
    if (bindingResult.hasErrors()) { 
     modelMap.put(BindingResult.class.getName() + ".copyCartForm", bindingResult); 
     return "copyshoppingcart"; 
    } 
    return "redirect:/home"; 
} 
1

Nie jestem pewien, dlaczego i ja bardzo cierpiał, dopóki nie zorientowaliśmy się, ale trzeba nazwać fasoli dokładnie jak twoja klasa fasoli. Zatem copyCartForm powinien być po prostu copyCart.

<form:form action="....." method="..." commandName="copyCart"> 
Powiązane problemy