webwork日期验证&Invalid field value for field Birthday

1.webwork源码分析:

com.opensymphony.xwork 
Interface XWorkMessages

public static final String ACTION_EXECUTION_ERROR = "xwork.error.action.execution";
public static final String MISSING_ACTION_EXCEPTION = "xwork.exception.missing-action";
public static final String MISSING_PACKAGE_ACTION_EXCEPTION = "xwork.exception.missing-package-action";
public static final String DEFAULT_INVALID_FIELDVALUE = "xwork.default.invalid.fieldvalue";

com\opensymphony\xwork\xwork-messages.properties
xwork.error.action.execution=Error during Action invocation
xwork.exception.missing-action=There is no Action mapped for action name {0}. Check if there is such an action name defined in xwork.xml and also if the such an action class exists. Check also the log to see if the action class is successfully loaded.
xwork.exception.missing-package-action=There is no Action mapped for namespace {0} and action name {1}. Check if there is such an action name with such namespace defined in the xwork.xml and also if such an action class exists. Check also the log to see if the action class is successfully loaded.
xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".


com.opensymphony.xwork.util 
Class XWorkConverter (详见getConversionErrorMessage方法)
java.lang.Object
  ognl.DefaultTypeConverter
      com.opensymphony.xwork.util.XWorkConverter
All Implemented Interfaces: 
ognl.TypeConverter 

com.opensymphony.xwork.validator.validators 
Class ConversionErrorFieldValidator (详见validate方法)
java.lang.Object
  com.opensymphony.xwork.validator.validators.ValidatorSupport
      com.opensymphony.xwork.validator.validators.FieldValidatorSupport
          com.opensymphony.xwork.validator.validators.RepopulateConversionErrorFieldValidatorSupport
              com.opensymphony.xwork.validator.validators.ConversionErrorFieldValidator
All Implemented Interfaces: 
FieldValidator, ShortCircuitableValidator, Validator 

从validators.xml代码中:<validator name="date" class="com.opensymphony.xwork.validator.validators.DateRangeFieldValidator"/>
com.opensymphony.xwork.validator.validators 
Class DateRangeFieldValidator
java.lang.Object
  com.opensymphony.xwork.validator.validators.ValidatorSupport
      com.opensymphony.xwork.validator.validators.FieldValidatorSupport
          com.opensymphony.xwork.validator.validators.AbstractRangeValidator
              com.opensymphony.xwork.validator.validators.DateRangeFieldValidator
All Implemented Interfaces: 
FieldValidator, ShortCircuitableValidator, Validator 

 
2.例子如下:
freemarker:

<@ww.form action="test" method="post" validate="true">
     <@ww.textfield label="Birthday" name="Birthday" />
     <@ww.submit />
</@ww.form>

 
action:

  private Date Birthday;
  ...
  public Date getBirthday() {
      return Birthday;
  }
  public void setBirthday(Date birthday) {
      Birthday = birthday;
  }

 
action名字-validation.xml:
 

   <field name="Birthday">
        <field-validator type="date">
                <message>必须为日期类型</message>
        </field-validator>
    </field>

 
如果我们在Birthday文本框输入: 222,这是一种非法日期格式,应该验证提示信息为:必须为日期类型
但是:验证提示信息为:Invalid field value for field "Birthday".
理解为什么提示该信息,就需要理解上面列出来的webwork源码中关系.

 


解决方法:在本地工程国际化资源文件中增加:
xwork.default.invalid.fieldvalue = Must be date format
xwork.default.invalid.fieldvalue = \u5FC5\u987B\u4E3A\u65E5\u671F\u7C7B\u578B
这样就会提示我们设置的提示信息了.控制台却报错.


产生原因:date validator字段校验器,检查指定的日期是否在指定的范围内.而不是用来验证日期的格式是否正确,提示信息在webwork系统代码抛出.

 <!-- 检查指定的日期是否在指定的范围内 -->
  <field name="Birthday">
  <field-validator type="date">
      <param name="min">1900-01-01</param>
      <param name="max">2008-01-01</param>
      <message>Birthday must be within ${min} and ${max}</message>
  </field-validator>
 </field>
 <!-- 可以使用正则表达式解决 -->
 <validator type="regex">
     <param name="fieldName">Birthday</param>
     <param name="expression">^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$</param>
     <message>Birthday日期格式错误</message>
 </validator>

 
并且控制台没有报错,问题已解决.

 

3.版本:
 webwork-2.2.4.jar
 xwork-1.2.1.jar
 spring-2.0-rc2.jar

 

4.日期格式验证必须为webwork客户端验证,如果为服务器端验证,提示信息仍为:Invalid field value for field "Birthday".
而不是通过正则表达式的验证提示信息.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值