Класс, объект которого будет проходить валидацию
public class UserRegForm {
private int id;
//register step 1
@StringLength(min=3, groups= {RegisterStep1.class})
private String login;
@StringLength(min=5, groups= {RegisterStep1.class})
private String password;
@StringLength(min=5, groups= {RegisterStep1.class})
private String name;
@StringLength(min=5, groups= {RegisterStep1.class})
private String surname;
@BirthDate(groups = {RegisterStep1.class})
private LocalDate birthDate;
@TrueValidMarker(groups = {RegisterStep1.class})
private FamilyStatus famStatus;
//register step 2
@StringLength(min=11, max=11, groups= {RegisterStep2.class})
private String phone;
@StringLength(min=3, groups= {RegisterStep2.class})
private String country;
@StringLength(min=3, groups= {RegisterStep2.class})
private String city;
@StringLength(min=30, groups= {RegisterStep2.class})
private String about;
@FileSize(min=100, groups = {RegisterStep2.class})
private MultipartFile photo;
// getters and setters не стал выклыдать сюда
}
Контролер:
@Controller
@RequestMapping("/")
public class RegisterController {
@GetMapping("/register1")
public String showRegiste1rPage(Model model)
{
UserRegForm user = new UserRegForm();
model.addAttribute("user", user);
return "registerStep1";
}
@PostMapping("/register1")
public String register1(@Validated(RegisterStep1.class) UserRegForm user, BindingResult result,
Model model, RedirectAttributes attr)
{
if(result.hasErrors())
{
model.addAttribute("user", user);
return "registerStep1";
}
attr.addFlashAttribute("user", user);
return "redirect:/web/register2";
}
}
Форма:
<form method="post" th:action="@{'/'+${servletPath}+'/register1'}" th:object="${user}">
<label th:text="#{register.login}"></label>
<input type="text" th:field="*{login}" required maxlength="20"/>
<p th:if="${#fields.hasErrors('login')}" th:errors="*{login}">Login error</p>
<label th:text="#{register.password}"></label>
<input type="password" th:field="*{password}" required maxlength="20"/>
<p th:errors="*{password}"></p>
<label th:text="#{register.name}"></label>
<input type="text" th:field="*{name}" required maxlength="20"/>
<p th:errors="*{name}"></p>
<label th:text="#{register.surname}"></label>
<input type="text" th:field="*{surname}" required maxlength="20"/>
<p th:errors="*{surname}"></p>
<label th:text="#{register.birthdate}"></label>
<input type="date" th:field="*{birthDate}" required maxlength="20"/>
<p th:errors="*{birthDate}"></p>
<label th:text="#{register.fam_status}"></label>
<p th:errors="*{famStatus}"></p>
<label th:text="#{register.married}"></label><input type="radio" required value="0" th:field="*{famStatus}"/>
<label th:text="#{register.notmarried}"></label><input type="radio" required value="1" th:field="*{famStatus}"/>
<input type="submit" name="go" th:value="#{register.next}"/>
</form>
Проблема в том, что ошибки валидация отрабатывает, но на форме сообщение об ошибке не выводится.
Как я понял, проблема в том, что в коде
if(result.hasErrors())
{
model.addAttribute("user", user);
return "registerStep1";
}
я добавляю user в качестве атрибута и тем самым обнуляю ошибки. Но если его не добавлять, тогда форма вообще не загрузится + мне нужно отобразить некорректно введенные данные. Как действовать в данной ситуации?