0

私には2つの別々のモデルがAccountDetailsFormありAccountDetails、前者はフォームの送信用で、後者は永続性用です。

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");
    }

永続性のためにHibernateを使用しています。@Validメソッドを明示的に呼び出したり、Spring Validator実装を使用したりするのではなく、accountDetails Beanを検証する方法はありvalidate()ますか?

回避策の提案を聞いてもかまいませんconfirmPasswordconfirmPassowordモデルにフィールドを含めるのは意味がないため、現在のアプローチに従っています。

4

2 に答える 2

1

のオブジェクトに@Valid入れます:AccountDetailsAccountDetailsForm

public class AccountDetailsForm {

    @Valid
    private AccountDetails accountDetails;

    @NotNull
    private String confirmPassword;

        //setter and getters
}

コントローラーでがAccountDetailsForm検証されると、 も検証されます。@ValidAccountDetails

参考例はこちら

于 2012-08-23T08:05:05.560 に答える
0

注釈内のグループ フィールドを見てください。適用する依存クラスを指定できます。ここでは、次のようになります。

@Valid(groups=AccountDetails.class)

Maven では、現在、Spring MVC 3.1 プロジェクトでこれらのバージョンのライブラリを使用しています。

springframework 3.1.2.RELEASE
javax.validation 1.0.0.GA
hibernate-validator-annotation-processor 4.1.0.Final
于 2012-08-23T10:57:29.663 に答える