0

私は単純な JSF+RichFaces フォームをいくつかのフィールドと明らかにそれらを保存するためのバッキング Bean を持っています。その Bean では、必要なすべてのプロパティに検証注釈 (jsr303/hibernate) がありますが、プロパティ (文字列) が空白かどうかを確認する注釈が見つからないようです。スプリング モジュールに @NotBlank アノテーションがあることは知っていますが、JSF はスプリングの検証をサポートしていません。それを確認する簡単な方法はありますか、それとも独自の注釈を書く必要がありますか?

@Edit: jsr303 から @NotNull と @NotEmpty を既に試して休止状態にしましたが、どちらも失敗しましたが、" " のような空白文字列を送信できます。

4

3 に答える 3

9

Hibernate Validator 4.1 を JSR-303 実装として使用すると、@NotNull および @NotEmpty とは別に、探していることを正確に実行する@NotBlankアノテーションが提供されます。(現在の)最新バージョンを使用する必要がありますが、それは機能します。

何らかの理由で最新バージョンに行けない場合は、自分で注釈を書くのにそれほど時間はかかりません。

于 2010-07-16T14:07:32.203 に答える
1

Hibernate Validator 4.1+ は、空白をトリミングした後に@NotBlanknull でなく空でないことをチェックする、カスタムの文字列のみの注釈を提供します。状態の API ドキュメント: @NotBlank

NotEmpty との違いは、末尾の空白が無視されることです。

これがチェックの前に文字列をトリミングしていることがわからない場合は、最初に 4.1 ドキュメントの「組み込みの定数」@NotEmptyの表の下にある説明を参照してください。

注釈付き文字列が null ではなく、トリミングされた長さが 0 より大きいことを確認してください。@NotEmpty との違いは、この制約は文字列にのみ適用でき、末尾の空白は無視されることです。

次に、コードを参照すると、次のように定義され@NotBlankていることがわかります。

@Documented
@Constraint(validatedBy=NotBlankValidator.class)
@Target(value={METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER})
@Retention(value=RUNTIME)
@NotNull
public @interface NotBlank{
  /* ommited */
}

この定義には 2 つの注意点があります。1 つ目は、 の定義に@NotBlankincludesが含まれ@NotNullているため、 の拡張です@NotNull。2 つ目は、NotBlankValidator.class@NotNullを使用して拡張することです。@Constraintこのクラスには次のisValidメソッドがあります。

public boolean isValid(CharSequence charSequence, ConstraintValidatorContext constraintValidatorContext) {
  if ( charSequence == null ) { //this is curious
    return true;
  }
    return charSequence.toString().trim().length() > 0; //dat trim
}

興味深いことに、このメソッドは、文字列が null の場合は true を返しますが、トリミングされた文字列の長さが 0 の場合にのみ false を返します。前述のように、@NotEmpty 定義には @NotNull も必要であるため、null の場合に true を返すことは問題ありません。 .

于 2013-06-16T19:16:17.357 に答える
0

たぶん@NotEmpty

これは次のように定義されます:

@NotNull
@Size(min=1)

リッチフェイスを使用しているので、使用していると思います<rich:beanValidator />か?JSR303アノテーションを処理します。

更新:試してみてください(ここから取得):

@Pattern(regex="(?!^[\s]*$)"). 
于 2010-07-16T13:57:38.193 に答える