2012-04-06 7 views
1

私の最近の記事のいくつかは、私が[送信]ボタンですべての検証を行っているという事実と関係しています。読み取り専用の編集ボックスで標準の検証を使用していますか?

私はこれをやっている理由は、いくつかの読み取り専用の編集ボックスを設定するボタンがあるということです。読み込み専用エディットボックスの検証を設定することはできますが、実行時には実行されません。

私はこれを理解することができず、一貫性のある検証をしたいと思ったので、私は自分の送信ボタンで自分の検証を使用しました。

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

[送信]ボタンにすべてのコードを入れることについての素晴らしい点は、すべての検証コードがすべて同じ場所にあることですが、カスタムコントロールを使用すると移植性の問題が発生する可能性があります。

また、[送信]ボタンが[送信]ボタンとしてマークされていない場合、検証をオフにする方法もあります。

+0

ブルース:あなたのアプローチを再考する必要があります。フィールドセット(たとえば、追加または削除)を変更するときは、フィールドとボタンの2つの場所で作業する必要があります。また、文書化が困難です。より良いアプローチは、バリデータを使用することです - あなたはそれらのための素晴らしいレポートをレンダリングすることができます!そして、あなたは基本的な原則に従います:一つの機能は一つのことを行います。バリデーターはあなたのフォームがどのように提出されたか気にもしません。 – stwissel

+0

「フォーカスを設定」については、http://www.wissel.net/blog/d6plinks/SHWL-8T5JSSを参照してください。 – stwissel

答えて

1

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

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

フィールドに「<input disabled="true">」タイプのタグを表示するオプションが表示されますが、私の頭の上から外れているかどうかはわかりません。これらのフィールドの検証は、フィールドプログラムで値をフィールドに入れ、値を追加する前にプログラムで検証する必要があるため、実際には検証の必要はありません。

2

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

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

あなたのQuerySaveDocumentコードは、このようになります(場所はreadOnlyのフィールドであると仮定します)。これにより

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

、フィールドベースのバリデータが最初に起動されますと、それらはすべて成功しQuerySaveDocument火災であれば。つまり、フィールドベースのバリデーターが失敗した場合、そのメッセージはメッセージ領域に表示されますが、QuerySaveDocumentメッセージは表示されません。 QuerySaveDocumentすべてのフィールドベースのバリデータが成功した後にのみメッセージが表示されます。

+0

今、入力ボックスがレンダリングされていないことに気づきました。ソリューションをありがとうが、私の不変の外観の問題に戻ります。通常の編集ボックスに必要なバリデーターを使用すると、ポップアップが表示されます。 @ ErrorMessageを使用すると、フォームにエラーメッセージが表示されます。 –

+0

フィールドにdisableClientSideValidation = "true"を設定した場合、ポップアップはもうなくなり、すべてのメッセージは同じになります。タイミングはまだ問題になる可能性があります。その場合は、QuerySaveDocumentですべて実行します。 – Newbs

+0

素晴らしい!クライアント側の検証を無効にするヒントをありがとう。サーバー側の検証と@ErrorMessageに残る唯一の残った問題は、ユーザーを問題のフィールドに連れて行くことができないことです。また、QuerySaveDocumentですべてを行うと、私が言及したその移植性が失われます。あなたがバリデータ型のコントロールをxPageに置くことができ、それを特定のフィールドに結びつけないなら、いいと思います。それでは、あなたはまだ何かのためのクライアント側の検証を持つことができます。 –

関連する問題