1

私の最近の投稿のいくつかは、送信ボタンですべての検証を行っているという事実に関係しています。

これを行う理由は、いくつかの読み取り専用編集ボックスを設定するボタンがあるためです。読み取り専用の編集ボックスの検証を構成できますが、実行時には実行されません。

私はこれを理解することができず、検証のために一貫した外観を持ちたかったので、送信ボタンで独自の検証を使用しました。

読み取り専用フィールドを検証する方法はありますか?

すべてのコードを [送信] ボタンに配置することの利点の 1 つは、すべての検証コードがすべて同じ場所にあることですが、カスタム コントロールを使用するときに移植性の問題が発生する可能性があることもわかります。

また、別の質問は、送信ボタンが送信ボタンとしてマークされていない場合に検証を開始する方法です。

4

2 に答える 2

2

Dec が言うように、ReadOnly フラグにより​​、フィールドのコンテンツが<input>タグなしでレンダリングされます。これにより、クライアント側での検証が不可能になり、JVM に送信されるデータがないため、フィールドにコーディングされた検証は送信時に無視されます。

ただし、データ ソースQuerySaveDocumentはトリガーされます。検証をそこに配置するか、レンダリングされるフィールド ( readOnly=false) に配置し、バリデーターを含むすべてのフィールドに必ず設定disableClientSideValidation="true"してください。

コードQuerySaveDocumentは次のようになります (場所が読み取り専用のフィールドであると仮定します)。

if (personDoc.getItemValueString("Location") == "") {
    @ErrorMessage("The inherited location is blank and that is bad.");
    return false;
}
return true;

これにより、フィールドベースのバリデーターが最初に起動し、それらがすべて成功した場合に起動しQuerySaveDocumentます。これは、フィールド ベースのバリデータが失敗した場合、そのメッセージはメッセージ エリアに表示されますが、QuerySaveDocumentメッセージは表示されないことを意味します。QuerySaveDocumentメッセージは、すべてのフィールド ベースのバリデータが成功した後にのみ表示されます。

于 2012-04-06T13:40:55.883 に答える
1

読み取り専用フィールドが Web ブラウザーにレンダリングされる場合、<input>タグではなく単純な<span>タグを使用してレンダリングされます。

検証は適切な入力タグでのみ実行できるため、発生しているシナリオは正しいものです。読み取り専用モードで検証するフィールドはありません。

フィールドのタイプタグをレンダリングする「読み取り専用で無効に表示」するオプションがありますが<input disabled="true">、フィールドが読み取り専用の場合、これらのフィールドで検証が機能するかどうかはわかりません。プログラムでフィールドに値を入力し、値を追加する前にプログラムで検証する必要があるため、検証はまったく必要ありません。

于 2012-04-06T13:24:13.113 に答える