2011-12-15 14:40
194人阅读
评论(0)
收藏
举报
三、编写自定义类型转换器,继承DefaultTypeConverter,重写convertValue方法
一、bean
- public class User
- {
- private String name;
- private String pass;
- //name属性的setter和getter方法
- public void setName(String name)
- {
- this.name = name;
- }
- public String getName()
- {
- return this.name;
- }
- //pass属性的setter和getter方法
- public void setPass(String pass)
- {
- this.pass = pass;
- }
- public String getPass()
- {
- return this.pass;
- }
- }
二、action
- public class LoginAction implements Action {
- // Action类里包含一个User类型的参数
- private User user;
- private String tip;
- // tip属性的setter和getter方法
- public void setTip(String tip) {
- this.tip = tip;
- }
- public String getTip() {
- return this.tip;
- }
- public String execute() throws Exception {
- if (getUser().getName().equals("cyh")&&getUser().getPass().equals("1")) {
- setTip("登录成功!");
- return SUCCESS;
- } else {
- setTip("登录失败!!");
- return ERROR;
- }
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- }
三、编写自定义类型转换器,继承DefaultTypeConverter,重写convertValue方法
converter
- package org.crazyit.app.converter;
- import java.util.Map;
- import org.crazyit.app.domain.User;
- import ognl.DefaultTypeConverter;
- /**
- *
- * @author Colo
- * @version 创建时间:2011-12-15 下午02:11:32
- */
- public class UserConverter extends DefaultTypeConverter {
- @Override
- public Object convertValue(Map context, Object value, Class toType) {
- // TODO Auto-generated method stub
- /*如果是要转换成User对象*/
- if (toType==User.class) {
- /*页面传递过来的参数被封装成了String[]*/
- String[] params = (String[]) value;
- User user = new User();
- /*取出user字符串,按,分割成数组*/
- String[] uservalues = params[0].split(",");
- user.setName(uservalues[0]);
- user.setPass(uservalues[1]);
- return user;
- }
- /*页面要显示user参数值,则要转换成字符串*/
- else if (toType==String.class) {
- User user =(User)value;
- return "姓名:"+user.getName()+", 密码:"+user.getPass();
- }
- return null;
- }
- }
四、为了让编写的类型转换器生效,我们要编写一个类型转换文件ActionName-conversion.properties,指明action中要转换类型的参数名称,以及对应调用的类型转换器,把它放在对应Action所在包下。ActionName是指action的类名,因此我的类型转换文件命名为:
LoginAction-conversion.properties
- user=org.crazyit.app.converter.UserConverter
输入用户名,密码
- <body>
- <s:form action="login">
- <s:textfield name="user" label="用户名称"></s:textfield>
- <s:submit value="提交"></s:submit>
- </s:form>
- </body>
转换结果
- <s:property value="user"/>
以上所说的是局部的类型转换器,即只对指定Action的指定属性进行转换,不管该action的该属性是数组也好,是list集合也好,该转换器的转换方法对该属性只转换一次,加入某个action有个List <User>类型的属性users,那么局部类型转换器将只钓友一次convertValue()方法,该方法把users请求参数一次性地转换为List <User>集合对象。
如果我们希望碰到User对象时都进行转换,那么我们就要配置全局的类型转换器。全局的类型转换器应该提供一个xwork-conversion.properties文件,该文件直接放在WEB-INF/classes路径下。
内容格式为
数据类型=转换器
- com.hsit.User=com.hsit.convert.UserConverter
上面就指定了User对象,通通跟UserConverter转换器绑定,碰到User对象就自动转换