2016-05-30 4 views
0

フォーム検証を使用してサンプルのSpring MVCフォームを実装しています。私はStudentフォームBeanのbeanプロパティとして複合型Addressを持っています。そして、私はAddress beanのプロパティに対してフォームの検証@NotEmptyを追加しました。しかし、同じことがUIに反映されていません。しかし、フォームの検証は、他のプリミティブ型のStudentフォームBeanに対して機能します。Spring MVCフォームの妥当性チェックはネストされた複合型のためには機能しません

したがって、検証はStudentフォームBeanでは完全に機能しますが、AddressStudentフォーム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

+0

の代わりに@ModelAttribute("student") @Valid com.xyz.form.beans.Student studentFormBeanを試してみて、あなたは幸せに関係するクラスが含まれていません...あなたの質問にそれらを追加することができます。 –

+0

コードを追加してください。解決策があれば教えてください。前もって感謝します。 –

+0

ネストされたオブジェクトには、JSR-303仕様で表現されているような '@ Valid'アノテーションが必要です。 'Student'の' Address'フィールドに '@ Valid'を入れてください。 –

答えて

0

こんにちは@Valid @ModelAttribute("student")

関連する問題