問題タブ [bean-validation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4919 参照

spring-mvc - Bean[] クラスバインディングの NullValueInNestedPathException

こんにちは、Bean の配列をフォームとして割り当てることができるかどうかお尋ねしたいと思います

たとえば、私はフォームを持っています:

私のjspでこのグループ配列にアクセスしたい. 私はこれを使用してそれを行うことができます:

私が得るのは例外です:

org.springframework.beans.NullValueInNestedPathException: Bean クラス [PageForm] の無効なプロパティ 'groupArray[0]': インデックス付きプロパティ パス 'groupArray[0]' で参照されるプロパティのインデックス付き値にアクセスできません: null が返されました

私を助けてください。

ありがとう。

0 投票する
1 に答える
7168 参照

hibernate - javax.validation: 「次のタイプのバリデータが見つかりませんでした:」というエラーを受け取る

フレームワーク: JQuery、Spring、Hibernate、Hibernate Validator (JSR-303 Bean Validation)
プラットフォーム: Windows

JSR 303-Bean Validation を使用してカスタム制約 @IdMustExist を定義しようとしています。制約の目的は、入力された ID 値が関連付けられたテーブルに存在するかどうかを確認することです。「javax.validation.UnexpectedTypeException: 次のタイプのバリデータが見つかりませんでした: com.mycompany.myapp.domain.package1.class1」というエラーが表示されます。

@IdMustExist を Class1 のフィールド定義に配置すると (以下のコード例に示すように)、上記のエラーが発生します。しかし、文字列フィールドに @IdMustExist 制約を配置すると、上記のエラーは発生しません。コードが IdMustExistValidator.java でクラッシュします。Hibernate が 'String' クラスの Validator を見つけられるのに、ドメイン クラス 'Class1' の Validator を見つけられない理由がわかりません。

私のクラス定義は次のとおりです。

Class2.java

IdMustExist.java

IdMustExistValidator.java (このクラスの設計にはバグがあることに注意してください)

}

0 投票する
2 に答える
1328 参照

java - JSR-303 (休止状態) アノテーションを使用し、{0} {1} 構文を使用してメッセージを変更する方法はありますか?

JSR-303 (休止状態) アノテーションを使用し、{0} {1} 構文を使用してメッセージを変更する方法はありますか? Spring Validator を使用すると、次のようになります。

String args[] = {"mark", "is", "cool"};
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "aboutYou", "aboutYou.required", args);

だから、メッセージを変えることができます。ただし、注釈を使用すると、メッセージ引数を使用できません。使用する引数が限られている (最小、最大など) ことは理解していますが、一般的なステートメントを作成してテキストを追加したいと考えています。

java: @NotEmpty (message="validation.name.required") プライベート文字列名;

プロパティ validation.name.required={0} が必要です...

出力:

フルネームが必要です。

0 投票する
2 に答える
50552 参照

spring - スプリング検証エラーをカスタマイズする

スプリング検証エラーをカスタマイズしたい

しかし、私はそれをすることができません。従うべきステップは何ですか?

0 投票する
4 に答える
15440 参照

jsf - JSF 2.0: JSR-303 Bean 検証をスキップするには?

ボタンがクリックされたときにJSFでJSR-303 Bean検証をスキップする方法は?

いくつかのアプローチを説明するための少し長い質問...次の形式のリストを検討してください。

ユーザーが行の追加または削除をクリックすると、アクションは検証なしで実行されます。問題は、JSF がリスト全体を再レンダリングし、それを検証しようとすることです。検証されない下書きの変更がある場合、検証エラーが発生し、リスナー メソッドが呼び出されることはありません (検証に失敗するとそれが妨げられるため)。ただし、immediate="true"f:ajax に追加すると、検証エラーがあってもメソッドを実行できます。ただし、検証エラーは引き続き発生し、ここに表示されます。

2 つのオプションが表示されます。

1) immediate="true" を使用し、検証エラーを表示しない

検証しないボタンの場合、immediate="true" を設定し、h:messages の場合は次のようにします。

次に、そのパラメーターを送信するように Save-button (実際にフォームを保存しようとする必要があります) を設定します。

SHOW_VALIDATIONこれにより検証が行われますが、パラメーターが存在する場合を除いてメッセージは表示されません。

2) 条件付きで facelets の検証を宣言します。

そして保存ボタン:

VALIDATEこれにより、パラメーターが存在する場合 (= [保存] ボタンが押された場合) にのみフィールドが検証されます。

しかし、これらは一種のハックのようです。JSR-303 Bean Validation を単純に使用して、宣言時にスキップするにはどうすればよいですか?

0 投票する
2 に答える
2888 参照

hibernate - Bean Validation:エンティティを検証するための制約がありますが、EntityNotFoundExceptionを受け取ります

テクノロジー:Spring、Hibernate、JSR-303、JQuery
プラットフォーム:Windows
@IdMustExistJSR-303制約を実装しようとしています。制約の目的は、入力されたID値が関連するテーブルに存在するかどうかを確認することです。IdMustExist.javaおよびIdMustExistValidator.javaコードスニペットについては、このリンクを参照してください。

シナリオ1-有効なID値が入力されました:この場合、hibernateのEntityManager.merge操作が実行されると、@IdMustExist制約が実行されていることがわかります。入力されたID値が別の関連付けられた/リンクされたテーブルに存在することを正常に検証します。Hibernateは保存操作を正常に完了します。@IdMustExistのバリデーターを呼び出す前に、hibernateがエンティティのselectSQLを起動することに気付きました。

シナリオ2-無効なID値が入力されました:この場合、hibernateのEntityManager.merge操作が実行されると、入力された無効なIDのエンティティが見つからなかったため、EntityNotFoundException(以下に示すスタックトレース)がスローされます。制約@IdMustExistが更新前の段階で発生し、ユーザーにエラーメッセージを適切に表示できることを期待していました。しかし、休止状態が更新前の段階に入る前に何かが失敗したようです。hibernateがエンティティのselectSQLを起動してから、EntityNotFoundExceptionをスローすることがわかります。validate@IdMustExistを呼び出す機会はありません。

入力したIDがJSR-303を介して関連付けられた/リンクされたテーブルに存在するかどうかを検証できないということですか?代替案はありますか?

よろしくお願いします。JP

HibernateClass2Dao.java

Class2ServiceImpl.java

Class2Controller.java

0 投票する
3 に答える
12293 参照

java - 注釈付きのメソッド引数を使用してJSR303BeanValidationを有効にする標準的な方法はありますか

私はしばらくの間、運がなくて周りを見回してきました。Spring MVCを使用していません@javax.validation.Validが、メソッド引数の検証を有効にするために使用したいと考えています。例を挙げると

@ControllerMVCを使用すると、これは単純な注釈付きBeanに対して有効になり<mvc:annotation-driven/>ます(5.7.4.3 Spring MVCで使用するためのJSR-303バリデーターの構成を参照)。

AOPの使用は非常に簡単です。それでも、これを行うための標準的な方法があると思います。したがって、質問:非MVCアプリケーションと非コントローラーBeanに、注釈付きBeanの入力検証を有効にするための同様の機能はありますか?

0 投票する
1 に答える
3327 参照

java - JSR303: クラスレベルの関係制約バリデーターでサブパスに関連付けられるように制約違反をカスタマイズしようとしています

私は JSR303 を使用しており、パスワードとその確認をフォームで比較するクラスレベルの制約を作成しました。ここでは、これを @SameAs 制約と名付けます。理想的には、制約を意図したターゲット (confirmPassword) に関連付けたいと思っていましたが、明らかに、囲んでいる Bean はパスワード プロパティを抽出するために使用できません。- したがって、クラスレベルの制約。

関係を検証するためにクラスレベルの制約を活用する方法を示す他の投稿を興味深く読みましたが、制約違反をカスタマイズしてサブパスに関連付ける方法を説明するものは何も見つかりません。この場合、2 つのフィールドの 1 つです。関係で。

私の質問は次のとおりです。制約違反からのメッセージを、最上位オブジェクトではなく「confirmPassword」フィールドにどのように関連付けますか? javax.Validator.validate( target, context) のコンテキスト パラメータを使用しようとしましたが、@SameAs のバリデータ内に Node を追加すると、カスケードの次の制約で例外が発生します (confirmPassword -> orderNumber プロパティを抽出しようとしています)。 order -> orderNumber の代わりに) 結果として。

現時点では、Web レイヤーの confirmPassword 入力フィールドの近くで使用するために引き出される制約メッセージを格納する追加のプロパティを作成することで、醜いクラッジに頼っています。

確かに私はここに何かが欠けています....以下の例を参照してください

コメントありがとうございます

0 投票する
1 に答える
3281 参照

jsf - JSF 2.0:検証が設定されている場合、複合コンポーネント内のh:inputTextが非文字列オブジェクトで失敗する

バッキングBeanの場合:

私が次のようなフォームを持っている場合:

これは問題なく動作します。しかし、私が次のようなことをすると

次のように直接ではなく、これをフォーム内で呼び出しますh:inputText

しかし、それから私は得る:

そして根本的な原因は次のとおりです。

検証を削除すると、機能します。また、fooがタイプの場合String、検証でも機能します。

さまざまなタイプを定義して(これも省略して)、他のいくつかのトリックを試してみましたがcc:editableValueHolder、実際にこれを実装する方法が少しわかりません。それともバグですか?コンバーターを使うのを忘れているようですか?私は何かを誤解しましたか?

0 投票する
1 に答える
2003 参照

jsf-2 - JSR303 ConstraintValidator、エラーページなしでメッセージを表示する方法

JSF 2.0 と Glassfish v3 を使用しています。JSR303 Bean 検証の機能をテストしていたので、実装するバリデーターを作成し、検証しConstraintValidatorたいプロパティに注釈を付けました。

問題なく動作しますが、Glassfish のデフォルトのエラー ページが表示されます。これを表示したくないので、メッセージを a<h:outputText>または何かに表示したいと思います。

これを達成する方法を知っている人はいますか?

これが私のバリデータメソッドです:

PS: 文字列の長さを検証する簡単な方法があることは知っていますが、上記のコード スニペットはデモ/テストのみを目的としています。私はバリデータと別の計画を持っています。