0

Spring MVC アプリケーションでカスタムバリデーターを作成しようとしています。@Model オブジェクトをカスタム Spring バリデーターに渡す方法があるかどうか知りたいですか?

Person オブジェクトと Account オブジェクトがあるとします。Person を検証するカスタム バリデーターを作成する必要がありますが、検証はアカウント オブジェクトとセッション内の他のオブジェクトに依存します。

たとえば、Person は 3 つを超えるアカウントを持つことはできず、アカウントの種類は特定のカテゴリに属し、3 年以上経過していない必要があります (この値、つまり、年数は、ログインしてセッションにあるプロファイルに基づいて動的になります)。

両方のオブジェクト、特に @Model をバリデータに渡すにはどうすればよいですか。

public class ServiceValidator implements Validator {

@Autowired
private ServiceDAO servicesDao;

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

@Override
public void validate(Object obj, Errors errors) {
     Person subscriber = (Person) obj;
    // How can I access @Model object here ???

}
4

1 に答える 1

1

可能かどうかは疑問ですが、2 つの回避策があります。

を。探しているのが永続化されたデータである場合は、おそらくバリデーターでもう一度取得し、そのデータを使用して検証する方がよいでしょう。たとえば、個人を検証している場合、個人のアカウントの詳細は DB から取得できます。 、DB から取得し、取得したデータを使用してバリデーターで検証します。

b. バリデーターを使用する必要がある場所の数がかなり限られている場合は、おそらくこれがより良いアプローチです。

public class ServiceValidator {

@Autowired
private ServiceDAO servicesDao;

public void validate(Person subscriber, List<Account> accounts, ..., Errors errors) {


}

requestmapped メソッドから上記のバリデータを直接呼び出すだけです。

あなたのコントローラーで..

List<Account> accounts = //retrieve from session
serviceValidator.validate(subscriber, accounts, ...errors);
if (errors.hasErrors())..
else..
于 2012-10-15T19:36:46.497 に答える