1

留空當在struts-config.xml中長田不來爲空,Struts表單在UI

<form-bean name="myForm" type="com.validator.CustomeDynaValidatorForm"> 
     <form-property name="testId" type="java.lang.Long"/> 
</form-bean> 

在validation.xml中

<form name="myForm"> 
     <field property="testId" depends="required"> 
     <msg name="required" key="test ID required."/> 
     </field> 

</form> 

在驗證-rules.xml中

<validator name="required" 
      classname="com.validator.CustomFieldChecks" 
       method="validateRequired" 
       methodParams="java.lang.Object, 
         org.apache.commons.validator.ValidatorAction, 
         org.apache.commons.validator.Field, 
         org.apache.struts.action.ActionMessages, 
         org.apache.commons.validator.Validator, 
         javax.servlet.http.HttpServletRequest" 
        msg=""/> 

In CustomFieldChecks.java

public static boolean validateRequired(Object bean, ValidatorAction va, Field field, ActionMessages errors, 
              Validator validator, HttpServletRequest request) 
    { 
     String value = null; 

     if (isString(bean)) 
     { 
      value = (String) bean; 
     } 
     else 
     { 
      value = ValidatorUtils.getValueAsString(bean, 
                field.getProperty()); 
      **// here value is 0 , when the field is left blank in UI** 
     } 

     if (GenericValidator.isBlankOrNull(value)) 
     { 
      //add error message 

      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

有人可以讓我知道,我如何確保如果字段在UI中留空,值應該爲null不爲0。有沒有辦法這樣做?我正在使用struts 1.2

+0

您是否收到任何錯誤? – NPKR

+0

@Pradeep:不,我沒有收到任何錯誤。其實我想拋出一個錯誤消息,如果字段留空。但自從它來到0時留空,所以它返回true,因此通過驗證 – JAB

回答

3

AFAIK,對於Struts1,您應該使用String而不是Long來表示由用戶輸入的值,因爲這是Struts使用用戶實際輸入的內容填充表單bean的唯一方法,並讓它您將重新顯示錯誤值的輸入頁面。

Struts會嘗試將空字符串轉換爲Long,如果該字符串不表示有效的long值,則會將Long初始化爲0。這是Struts的許多弱點之一。

0

這是因爲你的領域存在,它只是在犯規存在

0
GenericValidator.isBlankOrNull(value) behavior is 

Checks if the field isn't null and length of the field is greater than zero not including whitespace. 

因此您將所有傳入值的字符串在你的代碼返回null。 '0'也是一個不空的,所以它不會在條件。

你可以改變你的代碼,喜歡這裏

if (GenericValidator.isBlankOrNull(value)) { 
    ... 
} else if (value != null && value.equals("0")) { 
//Add here your sepecial error message for zero 

} 
+0

我同意這將工作,但我需要顯示其他錯誤消息時,用戶明確地輸入0. – JAB

+0

在這兩種情況下,如果用戶將它留給空白,如果條件失敗,如您所說,如果用戶在條件失敗時再次明確地輸入0,則在兩種情況下顯示的錯誤信息將是相同的... – JAB

1

是。找到修復程序。在下面的代碼中使用的web.xml中

<init-param> 
     <param-name>convertNull</param-name> 
     <param-value>true</param-value> 
</init-param> 

因此,這將默認的0轉換爲空值。