1

에 빈 떠날 때 긴 필드가 null로 오지 않을 형성 validation.xml에서Struts는 스트럿 - config.xml 파일에서 UI

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

검증-rules.xml에
<form name="myForm"> 
     <field property="testId" depends="required"> 
     <msg name="required" key="test ID required."/> 
     </field> 

</form> 

<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에서 필드가 비어있는 경우 값이 0이 아닌 null이어야합니다 있는지 확인합니다. 그렇게 할 수있는 방법이 있나요 ??? Struts를 사용하고 있습니다. 1.2

+0

오류가 있습니까? – NPKR

+0

@Pradeep : 아니요. 오류가 없습니다. 사실 나는 필드가 empty.But 남아 있기 때문에 오류 메시지를 던지고 싶습니다 그 때 0으로 공백 그래서 그 반환 사실 및 유효성 검사를 통과하면 – JAB

답변

3

AFAIK와 Struts1을 함께 사용하는 경우 사용자가 입력 한 값을 나타 내기 위해 String을 사용하고 Long을 사용하면 안됩니다. 이는 Struts가 사용자가 실제로 입력 한 내용으로 양식 bean을 채울 수있는 유일한 방법이기 때문입니다. 잘못된 값으로 입력 페이지를 다시 표시합니다.

Struts는 빈 문자열을 Long으로 변환하려고 시도하며 문자열이 유효한 긴 값을 나타내지 않으면 Long을 0으로 초기화합니다. 그것은 Struts의 많은 단점 중 하나입니다. 나던 따라서 당신의 코드에서 문자열에 들어오는 모든 값을 변환

0

그건, 그냥 널 (null)을 반환합니다. '0'도 빈 상태가 아니므로 조건이 충족되지 않습니다.

당신은

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

} 
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. 

존재 때 필드가 존재하기 때문에

+0

나는이 작동하지만, 동의 할 때 다른 오류 메시지를 표시해야합니다 0을 명시 적으로 입력하십시오. – JAB

+0

두 경우 모두 컨트롤은 섹션 만있는 경우 컨트롤에 올 것입니다. 사용자가 비워두면 조건이 실패한 경우 사용자가 명시 적으로 0을 다시 입력하면 조건이 실패한 경우이므로 두 경우 모두 표시된 오류 메시지는 같을 것입니다 ... – JAB

1

예 여기에 같은 코드를 변경할 수 있습니다. 고침을 찾았습니다. 코드 아래에 사용 된 web.xml에서

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

이렇게하면 기본값 0이 null로 변환됩니다.