我没有看到我在BindResult.rejectValue(...)之后输入的错误redirect。代码本身正在运行,程序成功地获取表单,成功处理它,但没有redirect错误数据保存到另一个(在本例中为上一个)页面。如何解决?
百里香代码:
<form th:action="@{/account/general/edit/name}" class="form-edit" method="post">
<div th:if="${#fields.hasErrors('customer.name')}" class="form-edit">
<span th:errors="*{customer.name}"></span>
</div>
<div>
<span>Имя</span>
<input type="text" th:value="${customer.name}" th:field="*{customer.name}">
</div>
<div th:if="${#fields.hasErrors('customer.surname')}" class="form-edit">
<span th:errors="*{customer.surname}"></span>
</div>
<div>
<span>Фамилия</span>
<input type="text" th:value="${customer.surname}" th:field="*{customer.surname}">
</div>
<input type="submit" value="Сохранить">
</form>
上面页面的 Java 控制器:
@Controller
@RequestMapping("/account/general/edit")
public class GeneralInformationEditController {
@GetMapping
public ModelAndView GeneralInformationEditGet(){
ModelAndView modelAndView = new ModelAndView();
//некоторый код
Customer customer = generalService.findByEmail(email);
modelAndView.addObject("customer", customer);
modelAndView.setViewName("account/edit/general_information_edit");
return modelAndView;
}
}
表单传递到的 Java 控制器:
@Controller
@RequestMapping("/account/general/edit/name")
public class NameEdit {
@PostMapping
public ModelAndView NameEditPost(@ModelAttribute("customer") Customer customerForm, BindingResult bindingResult){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("redirect:/account/general/edit");
//checkers
if(customerForm.getName().length() > 18 || customerForm.getName().length() < 2){
//Недостаточно символов. Должно быть между 2 и 18
bindingResult.
rejectValue("name", "error.name",
"Неправильное количество символов. Количество букв должно быть от 2 до 18.");
}
//checkers
if(customerForm.getSurname().length() > 18 || customerForm.getSurname().length() < 2){
//Недостаточно символов. Должно быть между 2 и 18
bindingResult.
rejectValue("surname", "error.surname",
"Неправильное количество символов. Количество букв должно быть от 2 до 18.");
}
if(bindingResult.hasErrors()){
System.out.println("ошибки");
return modelAndView;
}
//некоторый код, если ошибок нет
return modelAndView;
}
}
在这个网站上找到了答案。
一切都很简单。您只需添加:
redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.NAMEOFTHEATTRIBUTE", bindingResult);在 GET 表单中,您需要更改此行:
对此: