struts2的框架验证 .

来源:互联网 发布:纬创软件北京有限公司 编辑:程序博客网 时间:2024/05/08 12:10
 

struts2的框架验证

分类: Struts2 39人阅读 评论(0)收藏 举报

要运用struts2的验证框架。没有什么前提条件和配置。只需一个国际化资源文件和验证文件即可。
国际化文件就是struts.xml或struts.proterties文件中配置的,假如是在struts.xml中以常量来配置的。可以这样配置:
<constant name="struts.custom.i18n.resources" value="ApplicationResources,errors" />

那么所有classpath路径下的文件名为ApplicationResources.properties或是errors.properties文件都是struts可以使用的国际化资源文件.作为中文用户再添加一个ApplicationResources_zh_CN.properties即可

验证文件的文件名格式为:Xxx-validation.xml。直接放在action的目录下即可。我总结strus2的验证框架在应用中分为两类。一类是客户端验证,另一类是服务器端验证。由于客户端验证支持得不是很好。个人认为最好是客户端用js框架验证。服务端则交由struts好了。

struts的验证类型用多种。先举一个典型的对复合类型输入项的验证。情形是当acton里有一个复合类型属性,由于它不是简单的基本数据类型。则需在配置两个xml文件
action:

Java代码 复制代码
  1. package net.apex.ssh.common.web.action;   
  2.   
  3. import java.util.List;   
  4. import net.apex.ssh.common.model.User;   
  5. import net.apex.ssh.common.service.UserManager;   
  6. import com.opensymphony.xwork2.ActionSupport;   
  7.   
  8. public class UserAction extends ActionSupport {   
  9.     private UserManager userManager;   
  10.     private User user;   
  11.     private List<User> users;   
  12.     private Integer id;   
  13.        
  14.        
  15.     //setter/getter methods  
  16.     public User getUser() {   
  17.         return user;   
  18.     }   
  19.   
  20.     public void setUser(User user) {   
  21.         this.user = user;   
  22.     }   
  23.   
  24.     public List<User> getUsers() {   
  25.         return users;   
  26.     }   
  27.   
  28.     public void setUsers(List<User> users) {   
  29.         this.users = users;   
  30.     }   
  31.   
  32.     public Integer getId() {   
  33.         return id;   
  34.     }   
  35.   
  36.     public void setId(Integer id) {   
  37.         this.id = id;   
  38.     }   
  39.   
  40.     public void setUserManager(UserManager userManager) {   
  41.         this.userManager = userManager;   
  42.     }   
  43.        
  44.     /**  
  45.      *   
  46.      */  
  47.     public String save(){   
  48.         userManager.saveUser(user);   
  49.         return SUCCESS;   
  50.     }   
  51.        
  52.     public String delete(){   
  53.         if(id!=null){   
  54.             userManager.deleteUser(id);   
  55.         }   
  56.         return this.SUCCESS;   
  57.     }   
  58.        
  59.     public String list(){   
  60.         users = userManager.getUsers();   
  61.         return this.SUCCESS;   
  62.     }   
  63.        
  64. }  
package net.apex.ssh.common.web.action; import java.util.List; import net.apex.ssh.common.model.User; import net.apex.ssh.common.service.UserManager; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private UserManager userManager; private User user; private List<User> users; private Integer id; //setter/getter methods public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public void setUserManager(UserManager userManager) { this.userManager = userManager; } /** * */ public String save(){ userManager.saveUser(user); return SUCCESS; } public String delete(){i   null){                                  



当UserAction.java中有一个User属性时。需在User.java同目录下有一个User-validation.xml

Java代码 复制代码
  1. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"  
  2.     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">   
  3.   
  4. <validators>   
  5.     <field name="name">   
  6.         <field-validator type="requiredstring" short-circuit="true">   
  7.             <param name="trim">true</param>   
  8.             <message key="validate.user.name.notnull" />   
  9.         </field-validator>   
  10.     </field>   
  11.   
  12.     <field name="age">   
  13.         <field-validator type="int">   
  14.             <param name="min">1</param>   
  15.             <param name="max">100</param>   
  16.             <message key="validate.user.age" />   
  17.         </field-validator>   
  18.     </field>   
  19. </validators>  
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="name"> <field-validator type="requiredstring" short-circuit="true"> <param name="trim">true</param> <message key="validate.user.name.notnull" /> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">100</param> <message key="validate.user.age" /> </field-validator> </field> </validators>



另外,还得在UserAction.java同目录下有一个UserAction-validation.xml:

Java代码 复制代码
  1. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"  
  2.     "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">   
  3. <validators>   
  4.     <field name="user">   
  5.         <field-validator type="visitor">   
  6.             <param name="context"></param>   
  7.             <param name="appendPrefix">true</param>   
  8.             <message>用户</message>   
  9.         </field-validator>   
  10.     </field>   
  11.   
  12. </validators>  
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="user"> <field-validator type="visitor"> <param name="context"></param> <param name="appendPrefix">true</param> <message>用户</message> </field-validator> </field> </validators>


页面的表单代码如下:

Java代码 复制代码
  1. <s:form action="saveUser" method="post">   
  2.   <s:textfield name="user.name" label="姓名:"></s:textfield>   
  3.   <s:textfield name="user.age" label="年龄:"></s:textfield>   
  4.   <s:radio name="user.sex" list="#{'1':'男','0':'女'}" label="性别:" value="'1'"></s:radio>   
  5.   <s:submit></s:submit>   
  6. </s:form>  
<s:form action="saveUser" method="post"> <s:textfield name="user.name" label="姓名:"></s:textfield> <s:textfield name="user.age" label="年龄:"></s:textfield> <s:radio name="user.sex" list="#{'1':'男','0':'女'}" label="性别:" value="'1'"></s:radio> <s:submit></s:submit> </s:form>



很麻烦的是struts将类型类型转换的错误都缺省的加入到fieldErrors里。这样当我在年龄栏里输入字符串,页面就会出现"Invalid field value for field 'user.age'"而且这个还不受我的资源文件管理。从网上查询得知,原来
struts2框架自动生成一条错误信息,并将该错误信息放到addFieldError里面,这种默认的输出信息格式是在  xwork-2.0.x.jar中定义的.  com/opensymphony/xwork2/xwork-messages.properties文件中有一条xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".
这是一种全局的错误提示方式,整个系统中只要是字段类型转换错误都会这样提示,我们也可以改变这种输出格式,只要在全局的国际资源文件中重写xwork.default.invalid.fieldvalue就可以了

struts2的验证框架比struts1可是进步了不少。但感觉还不是很顺手。进一步学习中。。。

原创粉丝点击