posts - 64,  comments - 9,  trackbacks - 0

一. ActionSupport是个工具类,他实现了Action, Validatable等接口, Validatable提供validate()方法进行数据验证.Action只要继承ActionSupport类,重写validate()方法就可以进行数据验证

二. 校验的流程
     首先,Struts框架对输入数据进行类型转换,然后再进行数据校验,如果类型转换与数据校验都没有错误发生, 就进入execute(),否则请求将被转发到input视图

三. 注册实例
    首先新建RegistAcion.java

Java代码 复制代码
  1. package com;   
  2. import java.util.Date;   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4. public class RegistAction extends ActionSupport {   
  5.     private String userName;   
  6.            
  7.     private Integer age;   
  8.        
  9.     private Date birthday;   
  10.        
  11.     public String getUserName() {   
  12.         return userName;   
  13.     }   
  14.     public void setUserName(String userName) {   
  15.         this.userName = userName;   
  16.     }   
  17.     public Integer getAge() {   
  18.         return age;   
  19.     }   
  20.     public void setAge(Integer age) {   
  21.         this.age = age;   
  22.     }   
  23.     public Date getBirthday() {   
  24.         return birthday;   
  25.     }   
  26.     public void setBirthday(Date birthday) {   
  27.         this.birthday = birthday;   
  28.     }   
  29.     @Override  
  30.     public String execute() throws Exception {   
  31.         System.out.println("注册成功");   
  32.         return SUCCESS;   
  33.     }   
  34.     @Override  
  35.     public void validate() {   
  36.         if("".equals(userName)){   
  37.             addFieldError("userName""username is empty");   
  38.         }   
  39.         if(null != age){   
  40.             if(1 > age || 150 < age){   
  41.                 addFieldError("age""age invalid");   
  42.             }   
  43.         }   
  44.     }   
  45. }  

 配置Action

Xml代码 复制代码
  1. <action name="regist" class="com.RegistAction">  
  2.       <result name="success">/welcome.jsp</result>  
  3.       <result name="input">/regist.jsp</result>  
  4.  </action>  

 接着是注册页面和注册成功页面

regist.jsp

Html代码 复制代码
  1. <body>  
  2.     <form action="regist.action" method="post">  
  3.         <s:fielderror></s:fielderror>  
  4.         <table><tr>  
  5.                 <td>userName:</td>  
  6.                 <td>  
  7.                     <input type="text" name="userName">  
  8.                 </td>  
  9.             </tr>  
  10.             <tr>  
  11.                 <td>age:</td>  
  12.                 <td>  
  13.                     <input type="text" name="age">  
  14.                 </td>  
  15.             </tr>  
  16.             <tr>  
  17.                 <td>birthday:</td>  
  18.                 <td>  
  19.                     <input type="text" name="birthday">  
  20.                 </td>  
  21.             </tr>  
  22.             <tr>  
  23.                 <td colspan="2">  
  24.                     <s:submit value="注册"></s:submit>  
  25.                 </td>  
  26.             </tr>  
  27.     </form>  
  28.   </body>  

 如果不输入userName, age输入为abc,会提示
 Invalid field value for field "age".
 username is empty

1. 其中Invalid field value for field "age" 信息是struts2通过内置的类型转换器进行类型转换时,如果不能成功转换, struts2框架自动生成一条错误信息,并将该错误信息放到addFieldError里面,这种默认的输出信息格式是在  xwork-2.0.4.jar中定义的.  com/opensymphony/xwork2/xwork-messages.properties文件中有一条xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".

2. 这是一种全局的错误提示方式,整个系统中只要是字段类型转换错误都会这样提示,我们也可以改变这种输出格式,只要在全局的国际资源文件中重写xwork.default.invalid.fieldvalue就可以了.

实现方式:
在struts.xml中加入<constant name="struts.custom.i18n.resources" value="messageResource"></constant> (此处i18n,不是l,是1)
或者也可以在struts.properties中加入struts.custom.i18n.resources=messageResource
指定国际化资源文件名为messageResource. Properties

新建messageResource. Properties资源文件并添加数据xwork.default.invalid.fieldvalue={0} failure
修改之后字段类型转换错误提示为 : {0} failure

3 所有的类型转换失败后,struts2会将基本类型设置为0,对象类型设置为null,这里的age的类型为Integer,当类型转换失败age值为null,如果age的类型为int,那么转换失败后值为0

4.这种提示信息不够友好,也可以定义局布的提示信息,为每一个Action新建一个properties文件,文件名为XXX.properties(Action名.properties)

实现方式:新建RegistAction.properties并添加
invalid.fieldvalue.age=age error
invalid.fieldvalue.birthday=birthday error
其中age和birthday分别为字段的名称

四.
Struts2也提供类似BaseDispatchAction的功能

Java代码 复制代码
  1. package com;   
  2. import com.opensymphony.xwork2.ActionSupport;   
  3. public class Regist2Action extends ActionSupport {   
  4.     private String userName;   
  5.            
  6.     public String getUserName() {   
  7.         return userName;   
  8.     }   
  9.     public void setUserName(String userName) {   
  10.         this.userName = userName;   
  11.     }   
  12.     public String regist() throws Exception {   
  13.         System.out.println("注册成功-regist");   
  14.         return SUCCESS;   
  15.     }   
  16.        
  17.     public void validateRegist() {   
  18.         if(userName.equals("")){   
  19.             addFieldError("userName""请输入用户名-registValidate");   
  20.         }   
  21.     }   
  22. }  

  <action name="regist2" class="com.Regist2Action" method="regist">
     <result name="success">/welcome.jsp</result>
     <result name="input">/regist2.jsp</result>
   </action>

指定了method为regist,当请求时会执行regist(),不会再去执行默认的execute()方法了,
validateRegist()方法是专门针对regist校验的.(格式为validate+方法名)

posted on 2009-10-13 14:58 super_nini 阅读(318) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿

随笔档案

文章档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜