struts2类型转换


struts2支持复合类型转换的一个抽象类为org.apache.struts2.util.StrutsTypeConverter

所以在复合类型转换时,需要继承这个抽象类.
如:
public class UserConverter extends StrutsTypeConverter {

@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
// TODO 自动生成方法存根
User user=new User();

String[] values=arg1[0].split(",");
user.setUsername(values[0]);
user.setPassword(values[1]);

return user;
}

@Override
public String convertToString(Map arg0, Object arg1) {
// TODO 自动生成方法存根
User user=(User)arg1;

return "<"+user.getUsername()+","+user.getPassword()+">";
}

}

在这里面有两个方法.
其中public Object convertFromString(Map arg0, String[] arg1, Class arg2)
这个方法,表示将客户端中的String类型转换为混合类型,如User对象.
其中public String convertToString(Map arg0, Object arg1)
这个方法,表示复合类型转换为String类型.

所以在表单中使用如下:
<form action="Login.action" method="post">
<table align="center">
<caption><h3>用户登陆</h3></caption>
<tr>
<td>用户名与密码:<input type="text" name="user" /></td>
</tr>

<tr align="center">
<td colspan="2"><input type="submit" value="登陆" />
<input type="reset" value="重填" /></td>
</tr>
</table>

</form>
当用户在user的表单中输入 用户名,密码 时,如 abc,xyz.将会自动使用上面的类型转换,返回一

个User对象,供LoginAction直接使用.

public class LoginAction implements Action {

private User user;

/**
* @return user
*/
public User getUser() {
return user;
}

/**
* @param user 要设置的 user
*/
public void setUser(User user) {
this.user = user;
}

public String execute() throws Exception{

if(getUser().getUsername().equals("scott")&&getUser().getPassword().equals

("tiger")){
act.put("user",getUser());


return SUCCESS;
}
else{
return ERROR;
}
}

}

最后一点,需要注册类型转换类,
在LoginAction.class相同的路径下,
配置一个properties文件,
这个文件的命名规则为:ActionName-conversion.properties
以上的文件名:LoginAction-conversion.properties

在配置文件中使用 key=类型转换类
格式为:
user=converter.UserConverter
因为这个类放置在converter的包中,所以指定路径为converter.UserConverter

按照上面的方法,就可以方便的使用.上面是局部类型转换的写法,如果要使用全局类型转换也有类似的方法。

2.全局级别配置

classpath的根目录下创建一个xwork-conversion.properties文件,加入如下内容:

user=converter.UserConverter

这样可以在多个action中去使用user对象而不必每次都对不同的action中的user都进行类型转换.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值