1.简单的类型转换
<body>
<h3>直接封装成Map</h3>
<s:form action="login">
<s:textfield name="users['one'].name" label="第one个用户名"/>
<s:textfield name="users['one'].pass" label="第one个密码"/>
<s:textfield name="users['two'].name" label="第two个用户名"/>
<s:textfield name="users['two'].pass" label="第two个密码"/>
<tr>
<td colspan="2"><s:submit value="转换" theme="simple"/>
<s:reset value="重填" theme="simple"/></td>
</tr>
</s:form>
</body>
struts直接将参数封装成map
public class LoginAction implements Action
{
//Action类里包含一个Map类型的参数
//Map的value类型为User类型
private Map<String , User> users;
private String tip;
//users属性的setter和getter方法
public void setUsers(Map<String , User> users)
{
this.users = users;
}
public Map<String , User> getUsers()
{
return this.users;
}
//tip属性的setter和getter方法
public void setTip(String tip)
{
this.tip = tip;
}
public String getTip()
{
return this.tip;
}
public String execute() throws Exception
{
//在控制台输出Struts 2封装产生的List对象
System.out.println(getUsers());
//根据Map集合中key为one的User实例来决定控制逻辑
if (getUsers().get("one").getName().equals("crazyit.org")
&& getUsers().get("one").getPass().equals("leegang") )
{
setTip("登录成功!");
return SUCCESS;
}
else
{
setTip("登录失败!!");
return ERROR;
}
}
}
类型得提供空构造器
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;
}
}
2.自定义类型转换
继承StrutsTypeConverter实现双向转换
public class UserConverter extends StrutsTypeConverter {
// 实现将字符串类型转换成复合类型的方法
public Object convertFromString(Map context, String[] values, Class toClass) {
// 创建一个User实例
User user = new User();
// 只处理请求参数数组第一个数组元素,
// 并将该字符串以英文逗号分割成两个字符串
String[] userValues = values[0].split(",");
// 为User实例赋值
user.setName(userValues[0]);
user.setPass(userValues[1]);
// 返回转换来的User实例
return user;
}
// 实现将复合类型转换成字符串类型的方法
public String convertToString(Map context, Object o) {
// 将需要转换的值强制类型转换为User实例
User user = (User) o;
return "<" + user.getName() + "," + user.getPass() + ">";
}
}
action没有多少变化,struts负责将字符转换成user对象后只要照常处理
public class LoginAction implements Action {
private User user;
private String tip;
// user属性的setter和getter方法
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return this.user;
}
// 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("crazyit.org")
&& getUser().getPass().equals("leegang")) {
setTip("登录成功!");
return SUCCESS;
} else {
setTip("登录失败!!");
return ERROR;
}
}
}
xwork-conversion.properties是负责将字符转换成user对象的桥梁,即告诉action,里面的user是转换来的
org.crazyit.app.domain.User=org.crazyit.app.converter.UserConverter
配置文件<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="lee" extends="struts-default">
<action name="login" class="org.crazyit.app.action.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/welcome.jsp</result>
</action>
</package>
</struts>