Cześć,
Mam formularz który ma dane pracownika a następnie dane adresowe. Dane adresowe to lista składająca się z dwóch adresów (stały i korespondencyjny).
Wywołując submita na pustym formularzu powinienem dostać błąd że pole musi być wypełnione tymczasem otrzymuję komunikat:
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Tue May 19 15:31:29 CEST 2020
There was an unexpected error (type=Internal Server Error, status=500).
Exception evaluating SpringEL expression: "addresses" (template: "new_employee_form" - line 57, col 30)
a w konsoli po walidacji pracownika otrzymuję błąd:
2020-05-19 15:31:27.737 INFO 15244 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms
employee Nazwisko nie może zawierać cyfr i znaków specjalnych.
employee Obywatelstwo musi mieć między 3, a 30 znaków
employee Nazwa stanowiska nie może zawierać cyfr i znaków specjalnych.
employee Nazwisko musi mieć między 3, a 30 znaków.
employee Nazwa stanowiska musi mieć między 5, a 40 znaków.
employee Imię musi mieć między 3, a 25 znaków.
employee Pole musi być wypełnione
employee Imię nie może zawierać znaków specjalnych.
employee Obywatelstwo nie może zawierać znaków specjalnych.
2020-05-19 15:31:29.614 ERROR 15244 --- [nio-8080-exec-2] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8080-exec-2] Exception processing template "new_employee_form": Exception evaluating SpringEL expression: "addresses" (template: "new_employee_form" - line 57, col 30)
org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "addresses" (template: "new_employee_form" - line 57, col 30)
oraz dalej:
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'addresses' cannot be found on null
Kawałek widoku formularza do linijki 57
<div th:each="address, stat : *{addresses}">
<span th:switch="*{addresses[__${stat.index}__].type}">
<div style = "text-align: center;" th:case="P" ><h5>Adres stały</h5></div>
<div style = "text-align: center;" th:case="C" ><h5>Adres korespondencyjny</h5></div>
</span>
<div class="form-group">
<input type="hidden" class="form-control" th:field="*{addresses[__${stat.index}__].type}"/>
</div>
<div class="form-group">
<input type="text" class="form-control" th:field="*{addresses[__${stat.index}__].street}"/>
<label class="control-label">Ulica</label>
<div class="text-danger"><p th:if="${#fields.hasErrors('addresses[__${stat.index}__].street')}" th:errors="*{addresses[__${stat.index}__].street}"/></div>
</div>
Wycinek klasy address:
@NotNull
@Size(min=3, max=40, message = "Nazwa ulicy musi mieć między 3 a 40 znaków")
@Pattern(regexp = "[a-zA-Ząśćężźłóń0-9 ]+", message = "Nazwa ulicy nie może zawierać znaków specjalnych.")
public String street;
Gdy miałem formularz samego pracownika, wysyłka pustego skutkowała pojawieniem się zdefiniowanych errorów na widoku, natomiast teraz kiedy dodałem listę z adresami, zamiast otrzymywać komunikaty na widoku jak powyżej, otrzymuję info że lista address jest niewypełniona.
Jak poprawnie obsłużyć formularz adresów aby jego pola mogły być walidowane?