一、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对象就自动转换