名前を持つ単純なオブジェクトがあります
public class Foo {
private String name
}
サイトの各ユーザーは、最大 10 個の Foo を関連付けることができます。このコンテキスト内で、新しい Foo が作成されたときに、既に存在する同じユーザーに関連付けられた別の foo がないことを検証したいと思います。
カスタム Bean Validator を作成できますが、アノテーションでは、コンパイル中にパラメーターを定義する必要があります。次に、既存の Foos の名前を渡すにはどうすればよいでしょうか?
さまざまな場所で提案されているように、データを取得する別の方法としてEL 式を使用できます。これは、ハンマーを使ってナッツを割るような感じです。また、テストの容易さなど、考慮すべき潜在的な問題がたくさんあります。
ブールフィールドを使用してクラス全体の検証を行うことができました
@AssertTrue(message="Name already exists")
public boolean isNameUnique() {
return (existingNames.contains(name));
}
ただし、検証メッセージは名前フィールドの横に表示されません。これは表面的な問題であり、これはバックアップ プランになる可能性があります。ただし、理想的ではありません。
それは私に質問をもたらします:
フィールドレベルで値のコレクションに対して値をチェックし、次の制限を満たすことができる Bean Validator を書く簡単な方法はありますか?
- 実行時に決定される以前の値
- EL式などを使わない
- クラス レベルではなく、フィールド レベルの検証。
ハーディに応じて編集:
Foo クラスは、データベース内に保持されるエンティティです。これらは、DAO インターフェイスを介して取得および使用されます。
エンティティをループすることもできますが、それは DAO をバリデーターにプラグインすることを意味し、この制約を持つ別のクラスがある場合、同じことを再度記述する必要があることは言うまでもありません。