struts自定义类型转换器DefaultTypeConverter

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

你可能感兴趣的:(struts,String,user,action,getter,setter)