struts2 defaultTypeConverter

194人阅读 评论(0) 收藏 举报

目录(?)[+]

一、bean

  1. public class User  
  2. {  
  3.     private String name;  
  4.     private String pass;  
  5.   
  6.     //name属性的setter和getter方法  
  7.     public void setName(String name)  
  8.     {  
  9.         this.name = name;  
  10.     }  
  11.     public String getName()  
  12.     {  
  13.         return this.name;  
  14.     }  
  15.   
  16.     //pass属性的setter和getter方法  
  17.     public void setPass(String pass)  
  18.     {  
  19.         this.pass = pass;  
  20.     }  
  21.     public String getPass()  
  22.     {  
  23.         return this.pass;  
  24.     }  
  25. }  

 

二、action

  1. public class LoginAction implements Action {  
  2.     // Action类里包含一个User类型的参数  
  3.       
  4.     private User user;  
  5.     private String tip;  
  6.   
  7.     // tip属性的setter和getter方法  
  8.     public void setTip(String tip) {  
  9.         this.tip = tip;  
  10.     }  
  11.   
  12.     public String getTip() {  
  13.         return this.tip;  
  14.     }  
  15.   
  16.     public String execute() throws Exception {  
  17.           
  18.         if (getUser().getName().equals("cyh")&&getUser().getPass().equals("1")) {  
  19.             setTip("登录成功!");  
  20.             return SUCCESS;  
  21.         } else {  
  22.             setTip("登录失败!!");  
  23.             return ERROR;  
  24.         }  
  25.     }  
  26.   
  27.     public User getUser() {  
  28.         return user;  
  29.     }  
  30.   
  31.     public void setUser(User user) {  
  32.         this.user = user;  
  33.     }  
  34. }  

三、编写自定义类型转换器,继承DefaultTypeConverter,重写convertValue方法
converter

  1. package org.crazyit.app.converter;  
  2.   
  3. import java.util.Map;  
  4.   
  5. import org.crazyit.app.domain.User;  
  6.   
  7. import ognl.DefaultTypeConverter;  
  8.   
  9. /** 
  10.  *  
  11.  * @author Colo 
  12.  * @version 创建时间:2011-12-15 下午02:11:32 
  13.  */  
  14. public class UserConverter extends DefaultTypeConverter {  
  15.   
  16.     @Override  
  17.     public Object convertValue(Map context, Object value, Class toType) {  
  18.         // TODO Auto-generated method stub  
  19.         /*如果是要转换成User对象*/  
  20.         if (toType==User.class) {  
  21.             /*页面传递过来的参数被封装成了String[]*/  
  22.             String[] params = (String[]) value;  
  23.             User user = new User();  
  24.             /*取出user字符串,按,分割成数组*/  
  25.             String[] uservalues = params[0].split(",");  
  26.             user.setName(uservalues[0]);  
  27.             user.setPass(uservalues[1]);  
  28.             return user;  
  29.         }  
  30.         /*页面要显示user参数值,则要转换成字符串*/  
  31.         else if (toType==String.class) {  
  32.             User user =(User)value;  
  33.             return "姓名:"+user.getName()+", 密码:"+user.getPass();  
  34.         }  
  35.         return null;  
  36.     }  
  37.   
  38.       
  39. }  

 

四、为了让编写的类型转换器生效,我们要编写一个类型转换文件ActionName-conversion.properties,指明action中要转换类型的参数名称,以及对应调用的类型转换器,把它放在对应Action所在包下。ActionName是指action的类名,因此我的类型转换文件命名为:

LoginAction-conversion.properties

 

  1. user=org.crazyit.app.converter.UserConverter  

 

 

输入用户名,密码

  1. <body>  
  2.     <s:form action="login">  
  3.         <s:textfield name="user" label="用户名称"></s:textfield>  
  4.         <s:submit value="提交"></s:submit>  
  5.     </s:form>  
  6.   </body>  

转换结果

  1. <s:property value="user"/>  


以上所说的是局部的类型转换器,即只对指定Action的指定属性进行转换,不管该action的该属性是数组也好,是list集合也好,该转换器的转换方法对该属性只转换一次,加入某个action有个List <User>类型的属性users,那么局部类型转换器将只钓友一次convertValue()方法,该方法把users请求参数一次性地转换为List <User>集合对象。

如果我们希望碰到User对象时都进行转换,那么我们就要配置全局的类型转换器。全局的类型转换器应该提供一个xwork-conversion.properties文件,该文件直接放在WEB-INF/classes路径下。

内容格式为

数据类型=转换器

  1. com.hsit.User=com.hsit.convert.UserConverter  

上面就指定了User对象,通通跟UserConverter转换器绑定,碰到User对象就自动转换


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值