4

3 つのフィールドと送信ボタンを含むフォームがあります。ボタンがクリックされたとき、3 つのフィールドに何も入力されていない場合、検証メッセージをスローします。3 つのフィールドのいずれかが入力された場合、データを処理し、データ テーブルを使用して同じページに結果を表示します。1 つのフィールドに対して検証メッセージをスローすることはできますが、2 つ以上のフィールドに対してはスローできません。コードは次のとおりです。isEmpty()同様に、渡す必要がある長い値がある場合、長い値はorとして検証できないため、どのようにそれを行うことができるかを検証しますisNull()

これが私のコードです。複数のフィールドで使用し、長い値を持つフィールドで検証したいと考えています。

<h:inputText id="userName" value="#{user.userName}" required="true"
    requiredMessage="Please enter username" />

<h:inputText id="empId" value="#{user.empId}" required="true"
    requiredMessage="Please enter Employee Id" />

<h:inputText id="acctNm" value="#{user.acctNm}" required="true" 
    requiredMessage="Please enter Employee Id" />
4

2 に答える 2

6

required各フィールドの属性に、他のフィールドの送信された値の存在をチェックさせるだけです。#{param}送信された値は、クライアント ID をキーとしてパラメータ マップで使用できます。

キックオフの例を次に示します。

<h:form id="form">
    <h:inputText id="field1" ... required="#{empty param['form:field2'] and empty param['form:field3']}" />
    <h:inputText id="field2" ... required="#{empty param['form:field1'] and empty param['form:field3']}" />
    <h:inputText id="field3" ... required="#{empty param['form:field1'] and empty param['form:field2']}" />
</h:form>

フィールドの数が増えるにつれて、見苦しくなるだけです。

または、 OmniFaces を使用できます<o:validateOneOrMore>

<h:form id="form">
    <h:inputText id="field1" ... />
    <h:inputText id="field2" ... />
    <h:inputText id="field3" ... />

    <o:validateOneOrMore id="oneOrMore" components="field1 field2 field3" />
    <h:message for="oneOrMore" />
</h:form>

アクション メソッドでバリデーションを実行するのは悪い設計であることに注意してください。requieredこれには、 、validator<f:validator>および/またはなどの標準の JSF 検証機能を使用する必要があります<f:validateXxx>

于 2012-10-22T14:10:01.487 に答える
0

少なくとも iceFaces の場合、特に検証が単に「必須」よりも複雑な場合に、複数のフィールドにわたって検証する別のアプローチは、バッキング Bean 内でアプリケーション レベルの検証を使用することです。

@seeバッキング Bean のカスタム バリデータ

  • バリデーター属性を rcomponent に追加し、それをバッキング Bean の検証メソッドにポイントします。
  • バッキング Bean 内で、すべてのフォーム フィールドにアクセスして相互検証を実行できるようになりました

よろしく

ロブ

于 2013-08-22T09:26:12.713 に答える