2012-08-23 1 views
0

두 개의 개별 모델 AccountDetailsFormAccountDetails이 양식 제출을 위해 사용하고 후자는 지속성을 위해 사용합니다.Spring 3.1 유효성 검사 - 양식 제출 및 지속성을 위해 2 개의 별도 모델이있는 경우 @ valid를 사용하는 방법

AccountDetailsForm :

public class AccountDetailsForm { 

    private AccountDetails accountDetails; 

    @NotNull 
    private String confirmPassword; 

    //setter and getters 
} 

및 AccountDetails :

@Entity 
@Table(name = "ACCOUNT") 
public class AccountDetails { 

    @Id 
    @Column(name = "USER_NAME") 
    @NotEmpty 
    @Max(value = 60) 
    private String userName; 


    @Column(name = "PASSWORD") 
    @NotEmpty 
    @Min(value = 8) 
    private String password; 

    //setters and getters 
} 

가 지금은 @Valid를 사용하여 제출 양식을 확인하는 오전 : 나는 지속성 최대 절전 모드 사용하고

@RequestMapping(value="userRegistration", method = RequestMethod.POST) 
public ModelAndView registerUser(@Valid AccountDetailsForm accountDetailsForm, BindingResult result,Model model){ 

    //I autowire localValidatorFactoryBean to validate the fields in AccountDetails bean. 
    localValidatorFactoryBean.validate(accountDetailsForm.getAccountDetails(), result); 

    if (result.hasErrors()){ 
     model.addAttribute("accountDetailsForm", new AccountDetailsForm()); 
     model.addAllAttributes(result.getModel()); 
     return new ModelAndView("userRegistration"); 
    } 

. 명시 적으로 validate() 메서드를 호출하거나 스프링 유효성 검사기 구현을 사용하지 않고 @Valid을 사용하여 accountDetails bean의 유효성을 검사 할 수 있습니까?

confirmPassword 해결 방법에 대한 제안을 듣겠습니다. 모델에서 confirmPassoword 필드를 갖는 것이 적절하지 않기 때문에 현재 접근 방식을 따르고 있습니다. AccountDetailsForm가 컨트롤러에 @Valid로 확인되면

public class AccountDetailsForm { 

    @Valid 
    private AccountDetails accountDetails; 

    @NotNull 
    private String confirmPassword; 

     //setter and getters 
} 

AccountDetails 너무 확인됩니다

+0

어떤 자바 클래스 유형이 '모델 모델'이다. 이것은 봄 mvc 클래스 또는 당신이 작성한 것입니까? – emeraldjava

+0

봄 mvc 클래스 – shazinltc

답변

1

AccountDetailsFormAccountDetails 객체 @Valid를 넣습니다.

참고 예 here.

+0

답변 주셔서 감사합니다,하지만 그 작동하지 않습니다. BindingResult 객체에는 오류가 없습니다! – shazinltc

+0

시간이 많이 걸렸습니다 ... 작동해야합니다! 어쩌면 뭔가 다른 점이있을 것입니다 ... – jelies

+0

hibernate 유효성 검사기 참조에서 예제를 추가하기 만하면됩니다. 이 수입품을 사용하고 있습니까? 'javax.validation.constraints.NotNull' – jelies

0

주석 내부의 그룹 필드를 살펴보십시오. 적용 할 종속 클래스를 지정할 수 있습니다. 받는다는와

@Valid(groups=AccountDetails.class) 

, 나는 현재 스프링 MVC 3.1 프로젝트의 libs가 이러한 버전을 사용하십시오 : 여기 그런 일이 될 수

springframework 3.1.2.RELEASE 
javax.validation 1.0.0.GA 
hibernate-validator-annotation-processor 4.1.0.Final 
+0

사실, 실현하지 못했습니다 ... 어쨌든 당신은'Account' &&'AccountDetails'에'@NotEmpty (groups = ...)'와'@Size (groups = ...)'를 추가 할 수 있습니다. 전지. 어쩌면 DAO도 볼 수 있습니다. 규칙이 일치해야합니다. – ThierryB

+1

'@ Valid'는 그룹을 취하지 않지만 3.1 이후에는 동일한 방식으로 작동하고 그룹 ([SPR-6373] (https : // jira)을 취하는 스프링 주석'@Validated ({...}) ' .springsource.org/browse/SPR-6373)) –