0

私のデータベースでは、フィールドのタイプをVARCHARからDECIMALに変更しました。したがって、JavaモデルクラスのタイプをStringからBigDecimalに変更しました。

以前のXML検証ファイルには、requiredStringfieldValidatorがあります。そのままにしておくと、フォームフィールドに値(大きな小数)を入力するたびに、requiredStringfieldValidatorが起動します。(おそらく、StringをBigDecimalに変換する必要があるparamインターセプターに問題があります)。

とにかく同じフィールドに対して、REGEXである別のフィールドバリデーターがあります。

したがって、requieredStringを使用しない場合は、正規表現バリデーターだけで機能すると思いましたが、機能しません。フィールドに入力しない場合、エラーは発生しません。

だから..要約すると:

私のアクションには、受益者クラスのフィールドがあります。Beneficiairyクラスには、BigDecimalフィールドがあります。私のxml検証ファイルはこのフィールドのようなものです:

<field name="benef.nirBenef">
    <field-validator type="regex">
        <param name="expression"><![CDATA[^(1|2)\d{14}$]]></param>
        <message key="error.securityNumber"/>
    </field-validator>

フィールドが空の場合、検証はそれが大丈夫だと言います。

なぜ ?

requiredstringバリデーターを使用すると、値が適切であっても検証で間違っていると表示されます

ありがとうございました

4

1 に答える 1

0

私はそれを見つけました...それはどのオブジェクトでも同じです..

*/ どのフィールドが複雑かを示すファイルを作成します ファイルの名前: name_of_the_action-conversion.properties

たとえば、私のアクション クラスは BenefInfos.java なので、私のプロパティ ファイルは次のとおりです: BenefInfos-conversion.properties

benef.nirBenef=model.BigDecimalConverter
benef.nirAssure=model.BigDecimalConverter

値は、モデル パッケージのコンバーター クラス BigDecimalConverter の名前です。

*/ BigDecimalConverter.java を作成します

public class BigDecimalConverter extends DefaultTypeConverter {

@Override
public Object convertValue(Map Context, Object values, Class classe) {
    BigDecimal field = null;

    if(classe == BigDecimal.class) {
        String value = ((String[]) values)[0];
        field = new BigDecimal(value);
    }

    return field;
} 

}

*/VALIDATE を実行する場合は、独自のバリデーターを作成する必要があります。そうするために :

*/ validators.xml を追加して、独自のバリデーターを宣言します。

<validators>
    <validator name="socialsecurityformat" 
        class="validator.SocialSecurityValidator"
    />
</validators>

*/バリデータ クラスを作成します (ここでは SocialSecurityValidator です)

public class SocialSecurityValidator extends FieldValidatorSupport{
  public void validate(Object o) throws ValidationException {
    String fieldName = this.getFieldName();

    if(this.getFieldValue(fieldName, o) != null) {
        String value = ((BigDecimal)this.getFieldValue(fieldName, o)).toString();
        Pattern p = Pattern.compile("^(1|2|7)\\d{14}$");
        Matcher m = p.matcher(value);

        if(!m.matches()) {
            addFieldError(fieldName, o);
        }
    }
  }

}

*/ そして最後に、検証 xml ファイルで独自のバリデーターを使用します。

<field name="benef.nirBenef">
    <field-validator type="required">
        <message key="error.requiredField"/>
    </field-validator>
    <field-validator type="socialsecurityformat">
        <message key="error.securityNumber"/>
    </field-validator>
</field>

これが役立つことを願っています

于 2012-06-13T16:09:20.933 に答える