• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小强强
You never know until you try!
博客园    首页    新随笔    联系   管理    订阅  订阅

struts2.0输入校验

sturts2.0的输入校验分为field校验和action校验两种

一、filed校验(map实现)

1.在Action类中重写validate方法,编写自己的校验判断

    this.addFieldError(String fieldName, String errorMessage)向页面中的属性添加错误信息

2.在struts.xml里面配置校验失败跳转的页面,即配置input属性。

3.显示错误信息

  1)如果信息的输入采用普通的输入框,添加<s:fielderror></s:fielderror>标签即可显示出错误信息。

  2)如果使用struts的标签,则会自动在错误页面显示错误信息。

同时struts如果类型转换失败也会自动为我们产生错误提示信息,但不够友好。这是我们可以自己编写信息替换struts自动生成的错误信息。

1.全局替换

  首先在struts.xml里配置 <constant name="struts.custom.i18n.resources" value="baseName"/>,对应的需要在类路径下编写一个名字与value值相同,后缀为properties的资源文件:baseName.properties。

  里面内容为:xwork.default.invalid.fieldvalue={0}想要提示的错误信息。这时struts会用此资源文件里配置的信息替换默认的错误提示。

  缺点:此时错误信息还是相对简单,不够友好。

2.局部替换

  在需要校验的类的相同目录下编写名字与类相同,后缀为properties的资源文件:ClassName.properties。

  文件里内容为:invalid.fieldvalue.fieldName=错误提示信息。filedName为需要替换的属性名字。这样可以实现错误信息的精确控制。

注意:即使类型转换失败,它也会执行validate方法。在自动类型转换时,对int类型的属性,如果转换失败,会把属性值设为0;对对象类型的属性,类型转换失败会把值设为null。所有此时可能会出现一个属性多个错误信息的情况。

 

二、Action级别(Collection实现)

  其实与field级别类似,只是使用addActionError(String anErrorMessage) 方法添加错误信息。

  此时错误信息在页面的显示使用标签:<s:actionerror/>。

  这时可能会出现既有field级别的提示,也出现action级别的错误信息提示。如果只希望出现action级别的提示(ActionError),可以将struts标签的theme属性设置为:simple,这时将将不会用表格封装数据,不会有struts默认产生的错误提示,label属性的值也不会显示。

 

三、对类似struts1.x的DispatchAction的校验

  在struts1.x中有DispathcAction,可以在一个类中编写多个方法。同样,在struts2.x中也提供了类似功能。

  1)方法和execute完全一样,只是方法名不一样,类似代码如下:

    public String methodName() throws Exception {
        
return SUCCESS;
    }

 

   要调用此方法只需在struts.xml文件中指定method属性的值。

  2)此时,不同的方法可能有不同的校验方式,此时可以为此方法指定它所特有的校验方法。

    方法命名规则为“validate + 首字母大写的方法名”,如下:

    public void validateMethodName() {
        
super.validate();
    }

 

   3)但这时如果自己重写了validate()方法,它在执行完validateMethodName()校验方法后,还会执行validate()方法,这时有两个解决办法:

      a.不重写validate方法

      b.将validate方法名改为:validateExecute()

 

总结:输入校验方式的选择要么使用field级别的,要么使用action级别的,不要两者混用。

posted @ 2009-12-13 20:27  强强  阅读(757)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3