Я пытаюсь создать веб-приложение с использованием spring-boot-starter-web и thymeleaf.В качестве отправной точки я использую Руководство по валидации формы Spring - Руководство по началу работы (https://spring.io/guides/gs/validating-form-input/), потому что «эти руководства предназначены для максимально быстрой производительности - с использованием последних выпусков и техник проекта Spring, рекомендованныхкоманда Spring. "
Я изменил поле ввода возраста на раскрывающийся список возраста, который заполняется службой. Мой модифицированный код ниже:
package hello;
import java.util.List;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Controller
public class WebController implements WebMvcConfigurer {
@Autowired
AgeService ageService;
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/results").setViewName("results");
}
@GetMapping("/")
public String showForm(Model model) {
PersonForm personForm = new PersonForm();
model.addAttribute("personForm", personForm);
List<Integer> validAges = ageService.getValidAges();
model.addAttribute("validAges", validAges);
return "form";
}
@PostMapping("/")
public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "form";
}
return "redirect:/results";
}
}
<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<form action="#" th:action="@{/}" th:object="${personForm}" method="post">
<table>
<tr>
<td>Name:</td>
<td><input type="text" th:field="*{name}"/></td>
<td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</td>
</tr>
<tr>
<td>Age:</td>
<td><select th:field="*{age}">
<option value="">Please select ...</option>
<option th:each="validAge:${validAges}" th:value="${validAge}" th:text="${validAge}"></option>
</select></td>
<td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Age Error</td>
</tr>
<tr>
<td>
<button type="submit">Submit</button>
</td>
</tr>
</table>
</form>
</body>
</html>
Когда формаСначала показывается, что все в порядке, но если есть ошибка проверки и форма отображается повторно, то в раскрывающемся списке есть только опция «Пожалуйста, выберите…».
Какой метод рекомендуется использовать для этогоработа