2

私はBeanの検証に使用javax.validationしています。JSR-303

検証メソッドを呼び出した後、結果を確認し、GUI で何らかの処理を行います (たとえば、フォームで失敗したフィールドを強調表示するなど)。

ここで私の質問:

MyBean.java

public class MyBean {

    @Size(min = 1, message = "Please insert title")
    private String title;

    @Size(min = 1, message = "Please insert author")
    private String author;

    @Size(min = 1, message = "Please insert publisher")
    private String publisher;

    // ... something
}

私の検証方法:

Set<ConstraintViolation<MyBean>> failures = this.validator.validate(bean);

その後、失敗オブジェクトを反復処理します。

for (ConstraintViolation<MyBean> constraintViolation : failures) {
        propertyPath = constraintViolation.getPropertyPath().toString();
        if (propertyPath.equals("title")) {
            Color bg = new Color(242, 242, 251);
            this.txtTitle.setBackground(bg);

        }
        // some else if for other attributes (for example: author)
        // add error to all error messages
        errorMessage += constraintViolation.getMessage();
}

今私の問題は次のとおりです。失敗セット内のこれらのオブジェクトの順序。それは正しくありません。正しい順序を取得するための解決策はありますか?

ありがとうございます

4

2 に答える 2

3

Set は、その要素の順序を維持することが保証されていません (HashSet はそうではありません)。したがって、この順序に依存するべきではありません。たとえば、constraintViolation.getPropertyPath() を使用して、適切なプロセスを適用するために、おそらく各 ConstraintViolation をテストする必要があります。

しかし、理想的には、処理している障害を知る必要はありません。通常は、それが ConstraintViolation であることを知り、一般的な方法を適用するだけで済みます。

于 2012-10-24T14:17:33.587 に答える
0

グループシーケンスのために順序が必要でない限り、Bean Validation 実装が任意の順序で制約を評価することは実際には許可されています。これが、最初に _ConstraintViolation_s のセットを取得する理由です。

于 2012-10-25T09:47:29.323 に答える