我使用spring boot和thymeleaf进行表单验证,我有问题:我无法使用两个@ModelAttribute字段进行表单验证。像弹簧官方网站的表单验证这样的例子可以正常工作,但是当我在帖子中添加了两个@model属性时,我在网页上只得到错误而在弹出的例子中没有形式提示。
控制器类:
@Controller
public class MyController {
@Autowired
InstructorRepository instructorRepository;
@Autowired
DetailRepository detailRepository;
@GetMapping("/index")
public String mainController(){
return "index";
}
@GetMapping("/add")
public String addInstructorForm(Model model){
model.addAttribute("instructor", new Instructor());
model.addAttribute("detail", new InstructorDetail());
return "addInstructor";
}
@PostMapping("/add")
public String submitForm(@Valid @ModelAttribute Instructor instructor, @ModelAttribute InstructorDetail instructorDetail, BindingResult bindingResult1){
/* if (bindingResult.hasErrors()) {
return "instructorsList";
}
instructor.setInstructorDetail(instructorDetail);
instructorRepository.save(instructor);*/
if (bindingResult1.hasErrors()) {
return "addInstructor";
}
return "redirect:/instructorsList";
}
@GetMapping("/instructorsList")
public String getList(Model model){
Map map = new HashMap<>();
List list = new ArrayList<Instructor>();
list = instructorRepository.findAll();
List resultList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
Instructor instructor = (Instructor)list.get(i);
InstructorDetail detail = detailRepository.getInstructorDetailById(instructor.getId());
InstructorAndDetail iid = new InstructorAndDetail(instructor, detail);
resultList.add(iid);
}
model.addAttribute("instructors", resultList);
return "instructorsList";
}
}
html表格摘要:
<form action="#" data-th-action="@{/add}" data-th-object="${instructor}" method="post">
<div class="form-group">
<label for="1">First name</label>
<input class="form-control" id="1" type="text" data-th-field="${instructor.firstName}" placeholder="John"/>
<div data-th-if="${#fields.hasErrors('firstName')}" data-th-errors="${instructor.firstName}">name error</div>
</div>
答案 0 :(得分:0)
有下一个问题:然后我将实体添加到百里香形式我只通过了2个字段(或者之后的一个字段),但是有3个字段
@NotNull
@Size(min=2, max=30)
因此,当我在我的代码中对它们进行评论时,单个字段验证开始起作用:)。 如果您遇到同样的问题,请检查类中标记为@Valid注释的所有字段是否都在镜像中进行镜像。 (或具有默认有效值? UPD:如果没有表单镜像,则无法使用有效的默认值)