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 アノテーションを使用して検証を行う方法は誰でも知っています。