2010-12-29 10 views
1

私は共通の問題だと思っていますが、グーグルの一日は役に立たないものがあります。struts2条件付きXML検証

私は、チェックボックスとテキストフィールドを持つフォームを持っています。私はテキストフィールドの正規表現の検証をしたいと思いますが、チェックボックスが選択されている場合に限ります。 Regex検証は現在、他の非条件フィールドでも機能していますが、action-validation.xmlファイルでこれを可能にする構文がある場合は、私の人生では理解できません。すなわち、他の分野には以下のようなものがあります。私が必要とするのは、チェックボックスが選択されている場合にのみ、この状態を評価する方法です。

<validators> 
<field name="sn"> 
    <field-validator type="regex" > 
    <param name="expression"> 
    [0-9]{12} 
        </param> 
    <message>Serial number format is invalid. Please try again</message> 
    </field-validator> 
</field> 
</validators> 

これを行う方法のコード例はありますか?

ご迷惑をおかけして申し訳ありません。

答えて

1

Struts 1の場合、perform complex validationsに使用できる「validwhen」という検証規則がありましたが、Struts 2の場合、そのような検証はありません。 Strutsの2については

あなたが使用するOGNL式を指定できるExpression Validatorで行くことができるので、私はあなたがこのような何かを試すことができると思います:私は知りません

<validator type="expression"> 
    <param name="expression">checkboxField eq "selected" and inputText eq "bla"</param> 
    <message>....</message> 
</validator> 

ことの一つは、次の場合ですOGNLを使用して正規表現チェックを行う簡単な方法があります(あなたはそれを調べなければなりません)。

さらに、それがうまくいかない場合は、いつでも独自のcustom validatorを書くことができます。

0

表現fieldexpressionバリデータは、OGNL式を取ります。 trueに評価するとfalseが失敗します。あなたはこの要件のために非常に簡単に使うことができます。

個人的に、私はあなたがやっているように、XMLを介して組み込みのバリデータを使用し、validate()メソッド(またはmethodname-validate()メソッド)でカスタム検証ロジックを実装します。ただ好み、本当に良い理由はありません。

+0

ありがとうございました。私はvalidateメソッドの "バックエンド"で検証を行った。これは、実装に関して私にとって最もきれいに思えました。とにかくOGNLの表現は誤っているかもしれませんが、もっと複雑なバリデーションが必要でした。このアプローチをとらなくてはいけないのに、私はまだ厄介なようです。主に保守性の観点から。今ではフィールドの長さの変更などがある場合、単純な構成バリデーターファイルではなく、実際のコードのレビューと変更が必要です – Greg