Spring MVC表单验证不适用于嵌套的复杂类型

Sai*_*thi 1 java forms validation spring spring-mvc

我正在使用表单验证实现示例Spring MVC表单。我有一个复杂的类型Address作为Student表单bean的bean属性。并且我@NotEmptyAddressbean属性添加了表单验证。但是,UI中并未反映出同样的情况。但是表单验证适用于其他原始类型的Student表单bean。

所以,验证完全适用于Student表单bean而不是嵌套复杂类型,如AddressStudent的form bean。

我正在尝试了解原因和解决方法。

春季版本4.0+。休眠验证器API:5.2.4

Student POJO:

package com.xyz.form.beans;

import java.util.Date;
import java.util.List;

import javax.validation.constraints.Past;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

import com.xyz.validators.DateNotEmpty;
import com.xyz.validators.ListNotEmpty;

public class Student {
    @Size(min = 2, max = 30)
    private String firstName;
    @Size(min = 2, max = 30)
    private String lastName;
    @NotEmpty
    private String gender;
    @DateNotEmpty
    @Past
    private Date DOB;
    private String email;
    private String mobileNumber;
    @ListNotEmpty
    private List<String> courses;
    private Address address;

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getDOB() {
        return DOB;
    }

    public void setDOB(Date dOB) {
        DOB = dOB;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getMobileNumber() {
        return mobileNumber;
    }

    public void setMobileNumber(String mobileNumber) {
        this.mobileNumber = mobileNumber;
    }

    public List<String> getCourses() {
        return courses;
    }

    public void setCourses(List<String> courses) {
        this.courses = courses;
    }
}
Run Code Online (Sandbox Code Playgroud)

Address POJO:

    包com.xyz.form.beans;

    导入org.hibernate.validator.constraints.NotEmpty;

    导入com.xyz.validators.LongNotEmpty;

    公共课程地址{
        @不是空的
        私人弦屋
        @不是空的
        私人弦街;
        @不是空的
        私有字符串区域;
        @不是空的
        私人弦城市;
        @LongNotEmpty
        私人长针;

        公共字符串getHouseNo(){
            退房
        }

        公共无效setHouseNo(String houseNo){
            this.houseNo = houseNo;
        }

        公共字符串getStreet(){
            回街
        }

        public void setStreet(String street){
            this.street =街道;
        }

        公共字符串getArea(){
            返回区域;
        }

        公共无效setArea(字符串区域){
            this.area =面积;
        }

        公共字符串getCity(){
            返回城市;
        }

        public void setCity(String city){
            this.city =城市;
        }

        公共长getPin(){
            回销
        }

        public void setPin(Long pin){
            this.pin = pin;
        }
    }

Student 控制器:


    @RequestMapping(value =“ /newStudentDetails.do”,方法= RequestMethod.POST)
        公共ModelAndView newStudentDetails(
                @Valid @ModelAttribute(“ student”)com.xyz.form.beans.Student studentFormBean,
                BindingResult bindingResult){
            如果(bindingResult.hasErrors()){
                返回新的ModelAndView(“ newStudentPage”);
            }
            学生studentDto =新Student();
            studentDto.setFirstName(studentFormBean.getFirstName());
            studentDto.setLastName(studentFormBean.getLastName());
            studentDto.setGender(studentFormBean.getGender());
            studentDto.setDOB(新日期(studentFormBean.getDOB()。getTime()));
            studentDto.setEmail(studentFormBean.getEmail());
            studentDto.setMobileNumber(studentFormBean.getMobileNumber());
            StringBuilder sb = new StringBuilder();
            sb.append(studentFormBean.getAddress()。getHouseNo()+“,”);
            sb.append(studentFormBean.getAddress()。getStreet()+“,”);
            sb.append(studentFormBean.getAddress()。getArea()+“,”);
            sb.append(studentFormBean.getAddress()。getCity()+“-”);
            sb.append(studentFormBean.getAddress()。getPin());
            studentDto.setAddress(sb.toString());
            studentDto.setCourses(studentFormBean.getCourses());
            studentDao.createStudent(studentDto);
            ModelAndView mav =新的ModelAndView(“ newStudentSuccess”);
            返回mav;
        }

谢谢,维斯瓦纳特

Man*_*anu 5

您需要使用@Valid注释复杂类型。 这是引用(引用在这里