0

Seam 2、Jboss 6.1

私は現在、永続化オブジェクトで Seam を使用して Hibernate 検証アノテーションを使用して、jsf ページで検証を行っています。

@Entity
@Table(name = "CLIENT", catalog = "testdb")
public class Client implements java.io.Serializable {

private Integer             id;
private String              name;

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
public Integer getId() {
    return this.id;
}

@Column(name = "NAME", unique = true, nullable = false, length = 64)
@org.hibernate.validator.Length(min=4,max=64)
public String getName() {
    return this.name;
}

...Setters and rest
}

これは完全に機能し、名前フィールドの長さが 4 文字未満の場合、適切なエラーが表示されます。

問題は、ユーザーが他のチャネル、つまりスプレッドシートのインポート、サードパーティのアプリケーションなどでデータを送信することです。したがって、次のように Java コードで検証を行う必要があります。

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<K>> constraintViolations = validator.validate(bean);

現在、これは検証エラーを検出しませんが、データを永続化すると例外がスローされるため、どこかで機能します。@org.hibernate.validator.constraints.Length を使用して動作させることができますが、jsf 画面で制約の問題が報告されません。

@org.hibernate.validator.Length は古いレガシー Hibernate Validator ライブラリのように見えますが、これは seam 2 に非常に絡み合っているため、削除できません。

Java コードで従来の hibernate アノテーションを使用して検証を行う方法は誰でも知っています。

4

1 に答える 1

1

休止状態の検証を手動で呼び出す必要はありません。保存時のエラー処理

    try {
        save();
    } catch (InvalidStateException e) {
        logHibernateValidationException(e);
        ...

private void logHibernateValidationException(InvalidStateException e) {
    for (InvalidValue invalidValue : e.getInvalidValues()) {
        LOGGER.warn("Validation Failed. Instance of bean class: {0} has an invalid property: {1} with message: {2}",
                invalidValue.getBeanClass().getSimpleName(),
                invalidValue.getPropertyName(),
                invalidValue.getMessage());
    }
}
于 2012-10-04T08:15:58.373 に答える