Я реализую образец Spring MVC Form с подтверждением формы. У меня сложный тип Address
as bean property for Student
bean. И я добавил форму проверки @NotEmpty
для Address
bean properties. Но это не отражается в пользовательском интерфейсе. Но валидация формы работает для других примитивных типов форм bean.Валидация формы Spring MVC не работает для вложенных сложных типов
Таким образом, валидация отлично работает для формы Student
, но не для вложенных сложных типов, таких как Address
в пределах Student
форм bean.
Я стараюсь понять причину и исправить.
Весна версия 4.0+. Hibernate Validator апи: 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; } }
Адрес POJO:
package com.xyz.form.beans; import org.hibernate.validator.constraints.NotEmpty; import com.xyz.validators.LongNotEmpty; public class Address { @NotEmpty private String houseNo; @NotEmpty private String street; @NotEmpty private String area; @NotEmpty private String city; @LongNotEmpty private Long pin; public String getHouseNo() { return houseNo; } public void setHouseNo(String houseNo) { this.houseNo = houseNo; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public Long getPin() { return pin; } public void setPin(Long pin) { this.pin = pin; } }
Student Controller:
@RequestMapping(value = "/newStudentDetails.do", method = RequestMethod.POST) public ModelAndView newStudentDetails( @Valid @ModelAttribute("student") com.xyz.form.beans.Student studentFormBean, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return new ModelAndView("newStudentPage"); } Student studentDto = new Student(); studentDto.setFirstName(studentFormBean.getFirstName()); studentDto.setLastName(studentFormBean.getLastName()); studentDto.setGender(studentFormBean.getGender()); studentDto.setDOB(new Date(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 = new ModelAndView("newStudentSuccess"); return mav; }
Спасибо, Viswanath
И счастливо не включают классы заинтересованных ... Добавьте их к вашему вопросу. –
Введите код. Дайте знать, есть ли у вас решение. Заранее спасибо. –
Вложенные объекты требуют аннотации '@ Valid', как указано в спецификации JSR-303. Поэтому поставьте '@ Valid' в поле« Адрес »в« Студент ». –