3

この条件式の検証を行うことは可能ですか?:

(invitation.id==null and (newText==null or newText.isEmpty()))

私はいくつかの方法を何度も試しましたが、達成できません。このバージョンは機能していますが、サーバー側で、invitation.id が null または空の場合は無視します...何かアイデアはありますか???:

<field name="newText">
   <field-validator type="fieldexpression">
      <param name="expression">!(invitation.id eq null and (newText eq null or newText.empty))</param>
      <message>${getText("validation.required")}</message>
   </field-validator>
</field>

http://struts.apache.org/release/2.2.x/docs/fieldexpression-validator.html

表現がおかしい??ありがとう!

4

3 に答える 3

2

あなたの問題は、別のフィールド ( invitation.id) をnewTextフィールド バリデーターに検証しようとしていることです (可能だとは思いませんが、よくわかりません)。

ただし、それを2つのバリデーターに分割して、失敗のケースに対応するメッセージを発生させることができます。これはより正しい私見です。

<field name="invitation.id">
    <field-validator type="required">
        <message>${getText("validation.invitation.id.required")}</message>
    </field-validator>
</field>

<field name="newText">
    <field-validator type="fieldexpression">
        <param name="expression">
           <![CDATA[                 
           newText != null && !newText.trim().empty())
           ]]>
        </param>
        <message>${getText("validation.newText.required")}</message>
    </field-validator>
</field>

、それをトリミングする必要がある場合、そうでない場合は単純になる可能性があります

<field name="invitation.id">
    <field-validator type="required">
        <message>${getText("validation.invitation.id.required")}</message>
    </field-validator>
</field>

<field name="newText">
    <field-validator type="requiredString">
        <message>${getText("validation.newText.required")}</message>
    </field-validator>
</field>

requiredはすべての非テキスト フィールド用であるのに対し、はテキスト フィールド用であることに注意してくださいrequiredString

Expression Validator は非常に強力ですが、より複雑な目的で使用する必要があります。

たとえば、アクションから (Getter を介して) 動的に読み取られた別の Date に対して Date を検証する場合。以前にユーザーを選択しており、ページの日付をユーザーの有効期間の開始と終了に対して検証する必要があるとします。ただし、日付が挿入されていない場合は、必要なバリデーターによって既に処理されているため、検証にも合格する必要があります (したがって、2 つのメッセージは発生しません)。

<field name="inputDate">
    <field-validator type="required">
       <message><![CDATA[ Input Date is mandatory ]]></message>
    </field-validator>
    <field-validator type="fieldexpression">
        <param name="expression"> 
            <![CDATA[ 
              inputDate==null || 
                (inputDate >= chosenUser.startValidity 
                 && 
                 inputDate <= chosenUser.EndValidity
                ) 
            ]]>            
        </param> 
        <message>
            <![CDATA[Input Date must be included in the User Validity interval 
               (from ${chosenUser.startValidity} to ${chosenUser.endValidity} ) 
            ]]>
        </message>
     </field-validator>
</field>

ここで、chosenUserは Action の User オブジェクト ( public User getChosenUser()) で、startValidity と endValidity は User オブジェクトのプロパティ ( public Date getEndValidity()) です。

ご覧のとおり、動的読み取りはメッセージでも実行できます...これが式バリデーターの強力な方法です;)

于 2013-02-13T10:45:34.850 に答える
1

まず、 は有効なパラメーターではありません。本当にクライアント側で検証したい場合は、検証に java-script または jquery を使用してみてください。ただし、ユーザーがjavascriptを無効にする場合があるため、サーバー側でも入力を検証する必要があります 。その場合は、struts2-検証を使用できます。

詳細な説明については、 http: //viralpatel.net/blogs/struts2-validation-framework-tutorial-example/を参照してください。

于 2013-02-13T06:08:59.783 に答える