7.struts类型转换

Struts2类型转换实践

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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值