2012-06-13 49 views
0

在我的數據庫中,我將字段的類型從VARCHAR更改爲DECIMAL。因此,我將Java模型類中的類型從String更改爲BigDecimal。使用BigDecimal驗證Struts2

在我之前的XML驗證文件中,我有一個requiredString fieldValidator。如果我離開它,每次我在表單字段中輸入值(一個十進制小數),requiredString fieldValidator就會觸發。 (也許應該將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驗證,確認說,這是錯誤的,即使價值是好的

謝謝

+0

好,首先我可以使用需要,而不是requieredString – mlwacosmos

+0

秒驗證,我要創建一個擴展DefaultTypeConverter以確保帕拉姆攔截器做他的工作 – mlwacosmos

+0

一類,但它仍然看起來像我的正則表達式驗證器不工作了......所以這是現在的問題 – mlwacosmos

回答

0

我發現它...它爲任何對象同樣的事情。 。

* /創建一個文件,說什麼場(S)是/是文件的複雜 名稱: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; 
} 

}

* /現在如果你想驗證,你必須創建你自己的驗證器。要做到這一點:

* /加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> 

希望這是有益