用百里香叶在春季进行形态验证

时间:2017-12-06 03:37:09

标签: spring forms validation spring-mvc thymeleaf

我使用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>

1 个答案:

答案 0 :(得分:0)

有下一个问题:然后我将实体添加到百里香形式我只通过了2个字段(或者之后的一个字段),但是有3个字段

@NotNull
@Size(min=2, max=30)

因此,当我在我的代码中对它们进行评论时,单个字段验证开始起作用:)。  如果您遇到同样的问题,请检查类中标记为@Valid注释的所有字段是否都在镜像中进行镜像。 (或具有默认有效值? UPD:如果没有表单镜像,则无法使用有效的默认值)