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; } }
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; } }
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对象就自动转换