0

名前を持つ単純なオブジェクトがあります

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 をバリデーターにプラグインすることを意味し、この制約を持つ別のクラスがある場合、同じことを再度記述する必要があることは言うまでもありません。

4

1 に答える 1

0

Fooクラスをどのように使用したいかを確認するのに役立ちます。サンプルコードを拡張できますか?それらはFooインスタンスのリストに保持されていますか?カスタム制約が適しているようです。制約にパラメータを渡す必要があるのはなぜですか。fooを繰り返し処理して、名前が一意であるかどうかを確認します。

于 2013-03-08T11:17:54.203 に答える