2009-09-01 9 views
6

Pracuję z programistą front-end, który zapisuje pliki JSP. Mamy formularz, który działa poprawnie, z wyjątkiem błędów sprawdzania/wiązania/przetwarzania, które nie mogą być wyświetlane z tagiem Spring <form:errors/>.Wiosna MVC Znacznik <form: errors /> nie znajduje komunikatów o błędach

Potwierdziłem, że błąd jest ustawiony, i co najwyraźniej jest poprawną ścieżką do błędów. Podobno <form:errors path="*" /> powinien renderować je wszystkie, niezależnie od ścieżki, ale nic nie pokazuje.

Czy muszę dostać się do źródła biblioteki znaczników, aby wydedukować, co jest nie tak?

+1

Czy na pewno kod weryfikacyjny ustawił błędy? Czy możesz wkleić jakiś kod? –

+0

Ustawiłem punkty przerwania w kodzie sprawdzania poprawności i showForm() w SimpleFormController i widzę tam wszystkie błędy. ModelAndView pozostawia showForm z dołączonymi błędami. Ale w jsp, etykieta form: errors nie wyświetla nic związanego, ale inne dane modelu są renderowane poprawnie. Ustawiłem breakpoint w ErrorsTag.shouldRender i zawsze zwraca false, a getBindStatus() nie znajduje żadnego obiektu docelowego. Nie wiem, jak mogę opublikować dowolny kod, ponieważ jest on osadzony w ogromnym systemie. Wiem, że gdybym zbudował przykład, zadziałałby idealnie. :/ – Mojo

Odpowiedz

14

Prosta odpowiedź: < formularz: errors /> musi być w obrębie elementu <: form /> w celu powiązania z obiektem "polecenia" modelu.

16

2 rzeczy, które odkryłem.

1) upewnij się, podać nazwę obiektu/polecenia form-bean w tagu formularza

<form:form method="post" enctype="multipart/form-data" commandName="salesOrder"> 

2) Upewnij się nazwać swoją postać-fasolowa/obiekt polecenia przez nazwę klasy. W powyższym przykładzie moja klasa to com.abc.xyz.SalesOrder. Jeśli nazywam to "tak" lub "zamówienie" w modelu, to nie będzie pokazywać błędów.

+3

+1 za punkt (2). Naprawdę sprzeczne z intuicją! Dzięki! – weekens

+0

Drugi punkt jest bardzo dziwny, ale działa – gstackoverflow

1

Nie wiem, czy miałem ten sam problem. Mój problem polegał na tym, że ustawiłem niewłaściwą wartość dla @ModelAttribute. Ustawienie wartości na commandName formularza <: form/> działa poprawnie.

2

Jest to tylko dla dobra potomności, ponieważ odpowiedź została już zaakceptowana. Miałem te same objawy, ale dla mnie problemem było to, że w formularzu: w wartości atrybutu metody formularz jest rozróżniana wielkość liter: tzn. Metoda = "post" nie będzie wyświetlać błędów, podczas gdy metoda = "POST" będzie działać poprawnie. Na szczególną uwagę zasługuje tutaj fakt, że wszystko działało zgodnie z oczekiwaniami - widok formularza był wyświetlany zgodnie z oczekiwaniami, ponieważ sprawdzanie poprawności nie powiodło się Z WYJĄTKIEM, że błędy nie były widoczne w ostatecznej stronie JSP.

Takie zachowanie będzie występować na dowolnym kontrolerze, który rozciąga AbstractFormController, ponieważ

protected boolean isFormSubmission(HttpServletRequest request) 

robi "post" .equals zamiast "post" .equalsIgnoreCase.

3

Pytanie - Dlaczego? "Forma: ścieżka error =" xyzProperty”nie drukuje błąd na JSP

Anserwer -

  1. BindingResult ma właściwość ObjectName który wiąże listę błędów z nazwa_polecenia w Twój JSP.

  2. Defualt objectName = swoją nazwę obiektu. np jeśli nazwa klasy jest MyCareerFB następnie objectName = myCareerFB. Pamiętać pierwszego znaku w małej obudowie, wynika, fasola nameing konwencji.

  3. Zachowaj wartość commandName w jsp takim samym jak objectName, w przeciwnym razie błąd nie zostanie powiązany z obiektem, a jsp nigdy nie wyświetli komunikatu o błędzie.

0

Możliwe, że nie użyto właściwej konwencji nazewnictwa dla atrybutu commandName. To był problem, który wpadłem.Miałem klasę o nazwie "XYZTask" i nazwałem postać commandName = "xyztask". Całe odwzorowanie formularza działało, ale nie widziałem błędów zgłaszanych przez tag. Zmieniłem nazwę mojej klasy na "XyzTask" i formularz commandName = "xyzTask", a błędy zaczęły działać.

Powiązane problemy