2

struts-config.xml内

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

validate.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=""/>

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

誰かplzが私に知らせてもらえますか、UIでフィールドが空白のままになっている場合、値が0ではなくnullであることを確認するにはどうすればよいですか。そうする方法はありますか?ストラット1.2を使用しています

4

4 に答える 4

3

私の知る限り、Struts1 では、ユーザーが入力した値を表すには Long ではなく String を使用する必要があります。Struts がユーザーが実際に入力した内容をフォーム Bean に入力し、入力ページを誤った値で再表示できるようにする唯一の方法だからです。

Struts は、空の文字列を Long に変換しようとし、文字列が有効な long 値を表していない場合、Long を 0 に初期化します。これは、Struts の多くの弱点の 1 つです。

于 2012-12-27T12:41:04.483 に答える
2

はい 。修正が見つかりました。以下のコードで使用されるweb.xml

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

したがって、これはデフォルトの0をnullに変換します。

于 2012-12-28T05:21:36.980 に答える