Przenoszę aplikację Spring jsp do Thymeleaf, ale mam problem z wyświetlaniem błędów formularza.Nie wyświetlają się komunikaty o błędach w formie Spring
Używam SpringTemplateEngine i ThymeleafViewResolver i renderowanie szablonów działa. Również wartości formularzy są wypełniane w polach wprowadzania formularzy.
Jedyne, co do tej pory nie działa, to wyświetlanie komunikatów o błędach w formie.
Mój kontroler wygląda następująco:
@RequestMapping(method = RequestMethod.POST)
String save(@Valid CustomerForm form, BindingResult bindingResult, Model model, RedirectAttributes redirectAttributes) {
if (bindingResult.hasErrors()) {
model.addAttribute("form", form)
return "app/customers/create"
}
....
I drukowane bindingResult celu sprawdzenia zawiera ona błąd:
binding result = org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'customerForm' on field 'name': rejected value []; codes [customerForm.name.NotBlank,name.NotBlank,java.lang.String.NotBlank,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [customerForm.name,name]; arguments []; default message [name]]; default message [may not be empty]
gdy próbuję wyświetlić błąd za pomocą:
<ul>
<li th:each="e : ${#fields.detailedErrors()}" th:class="${e.global}? globalerr : fielderr">
<span th:text="${e.global}? '*' : ${e.fieldName}">The field name</span> |
<span th:text="${e.message}">The error message</span>
</li>
</ul>
to nie wyświetla żadnego błędu.
Próbowałem różnych alternatyw, jak udokumentowano na http://www.thymeleaf.org/doc/html/Thymeleaf-Spring3.html#validation-and-error-messages, ale bez powodzenia.
Czy brakuje mi czegoś?
EDIT
Uwaga Próbuję wyświetlić błąd w formie określonej przez th: obiektu:
<form id="customer-form" action="#" th:action="@{/app/customers}" th:object="${form}" method="post" class="form-horizontal">
<ul>
<li th:each="e : ${#fields.detailedErrors()}" th:class="${e.global}? globalerr : fielderr">
<span th:text="${e.global}? '*' : ${e.fieldName}">The field name</span> |
<span th:text="${e.message}">The error message</span>
</li>
</ul>
Czy w tagu 'form' umieściłeś tag" ul "z błędami? Sprawdziłem to za pomocą mojego kodu, a gdy jest zawarte z elementem "formularza", działa dobrze, inaczej - nie. –
Dzięki Rafał, próbuję wyświetlić błędy w zestawie formularza za pomocą th: object. Zaktualizowałem pytanie, aby to odzwierciedlić. –
Mój kod był nieco inny, ale działa idealnie. Różnica w moim kodzie polega na tym, że nie zapełniam formularza z powrotem do modelu jawnie ('model.addAttribute (" formularz ", formularz)'), ponieważ jest on automatycznie dodawany. Od dawien dawna zawsze oznaczam parametr wejściowy nie tylko za pomocą "@ Valid", ale także za pomocą "@ ModelAttribute". Może mógłbyś spróbować. –