Mam nastepujace encje:
@Entity
public class Pet extends BaseClass{
@Column(name = "pet_name")
@Size(min=2,max=15,message="{Size}")
private String petName;
@OneToOne()
@JoinColumn(name = "owner_Id")
private Owner owner;
///
@Entity
public class Owner extends BaseClass {
@Column(name = "first_name")
@Size(min = 2, max = 15, message = "{Size}")
private String firstName;
@Column(name = "last_name")
@Size(min = 2, max = 15, message = "{Size}")
private String lastName;
@Column(name = "phone")
@Digits(fraction = 0, integer = 9)
private String phoneNumber;
tworze z tych obiektów DTO do przekazania do widoku do formularza:
public class PetDto {
private Pet pet;
private Owner owner;
kontroller wyglada nastepujaco:
@RequestMapping(value = "/addPet", method = RequestMethod.POST)
public String addPetPost(@Valid @ModelAttribute(value="petDto") PetDto petDto, BindingResult result){
if(result.hasErrors())
return "/addPet";
formularz wyglada nastepujaco
<form th:action="@{/addPet}" th:object="${petDto}" method="post">
<table>
<tr>
<td>Pet name:</td>
<td><input type="text" th:field="*{pet.petName}" /></td>
<td th:if="${#fields.hasErrors('pet')}" th:errors="*{pet}">fieldError</td>
</tr>
<tr>
<td>Owner First name:</td>
<td><input type="text" th:field="*{owner.firstName}" /></td>
<td th:if="${#fields.hasErrors('owner')}" th:errors="*{owner}">fieldError</td>
</tr>
<tr>
<td>Owner Last name:</td>
<td><input type="text" th:field="*{owner.lastName}" /></td>
<td th:if="${#fields.hasErrors('owner')}" th:errors="*{owner}">fieldError</td>
</tr>
<tr>
<td>Owner Number:</td>
<td><input type="text" th:field="*{owner.phoneNumber}" /></td>
<td th:if="${#fields.hasErrors('owner')}" th:errors="*{owner}">fieldError</td>
</tr>
<tr>
<td><input type="submit" value="add" /></td>
</tr>
</table>
</form>
Teraz:
Problem polega na tym aby walidacje z pol obiektów Pet i Owner, przekazac pod walidacje w obiekcie DTO, obecnie rzucany jest whitelabel page od springboota, gdyż w linii
if(result.hasErrors())
nie są wyłapywane walidacje pol obiektów , i w/w wyrazenie zwraca false;
Napisalem wlasne annotacje sprawdzające cały obiekt ale to rozwiazanie jest średnie, a zakładam ze da sie zrobic to jakos przyzwoiciej.