フォーム検証を使用してサンプルのSpring MVCフォームを実装しています。私はStudent
フォームBeanのbeanプロパティとして複合型Address
を持っています。そして、私はAddress
beanのプロパティに対してフォームの検証@NotEmpty
を追加しました。しかし、同じことがUIに反映されていません。しかし、フォームの検証は、他のプリミティブ型のStudent
フォームBeanに対して機能します。Spring MVCフォームの妥当性チェックはネストされた複合型のためには機能しません
したがって、検証はStudent
フォームBeanでは完全に機能しますが、Address
Student
フォームBeanのようなネストされた複合型では機能しません。
私は理由と修正を理解しようとしています。
春バージョン4.0以上。 HibernateバリデータAPI:5.2.4
学生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; } }
学生コントローラー:
@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
の代わりに
@ModelAttribute("student") @Valid com.xyz.form.beans.Student studentFormBean
を試してみて、あなたは幸せに関係するクラスが含まれていません...あなたの質問にそれらを追加することができます。 –コードを追加してください。解決策があれば教えてください。前もって感謝します。 –
ネストされたオブジェクトには、JSR-303仕様で表現されているような '@ Valid'アノテーションが必要です。 'Student'の' Address'フィールドに '@ Valid'を入れてください。 –