0

Spring MVC 3 を使用する Web アプリの検証を実装する必要があります。問題は、Bean クラスに getProperty("name") や setProperty("name",valueObj) などのメソッドがあることです。getProperty("name") に異なる値を渡すことによって返されるデータに対して検証を行う必要があります。

この種の Bean の検証がサポートされているかどうかを知りたいのですが、サポートされていない場合は、どのような回避策があるかを知りたいです。

ありがとう、アティフ

4

2 に答える 2

4

私はそうは思わない。Bean の検証は、javabeans、つまり getter と setter を持つクラス フィールドで実行されます。カスタムバリデーターを登録してバリデーションを機能させたとしても、バインディングは機能しません。オブジェクトを設定するカスタム バインダーも登録する必要があります。かなり複雑になります。そのため、javabeans 規則に固執してください。

于 2012-04-23T21:48:07.740 に答える
2

を実装するカスタム検証クラスが必要なようですorg.springframework.validation.Validator

@Component
public class MyValidator implements Validator {

    @Override
    public boolean supports(Class<?> clazz) {
        return MyBean.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        MyBean myBean = (MyBean) target;

        if (StringUtils.isBlank(myBean.getProperty("state"))) {
            errors.rejectValue("state", "blank");
        }
    }

}

コントローラーでは、次のように手動で検証を行います。

@Autowired
private MyValidator myValidator;

@RequestMapping(value = "save", method = RequestMethod.POST)
public String save(@ModelAttribute("myBean") MyBean myBean, BindingResult result) {

    myValidator.validate(myBean, result);
    if (result.hasErrors()) {
        ...
    }

    ...

}
于 2012-04-23T21:51:01.407 に答える