Struts2学习笔记(八):请求参数的接收和自定义类型转换器

采用基本类型接收请求参数(get/post)

在Action类中定义与请求参数同名的属性,struts2便能自动接收请求参数并赋予给同名属性。

请求路径: http://localhost:8080/test/view.action?id=78

public class ProductAction {
private Integer id;
public void setId(Integer id) {//struts2通过反射技术调用与请求参数同名的属性的setter方法来获取请求参数值
this.id = id;
}
public Integer getId() {return id;}
}

采用复合类型接收请求参数

请求路径: http://localhost:8080/test/view.action?product.id=78

 
public class ProductAction {
private Product product;
public void setProduct(Product product) { this.product = product; }
public Product getProduct() {return product;}
}
 
Struts2首先通过反射技术调用Product的默认构造器创建product对象,然后再通过反射技术调用product中与请求参数同名的属性的setter方法来获取请求参数值。
 

自定义类型转换器

java.util.Date类型的属性可以接收格式为2009-07-20的请求参数值。但如果我们需要接收格式为20091221的请求参数,我们必须定义类型转换器,否则struts2无法自动完成类型转换。

import java.util.Date;
public class HelloWorldAction {
private Date createtime;

public Date getCreatetime() {
return createtime;
}

public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
}


public class DateConverter extends DefaultTypeConverter {
@Override public Object convertValue(Map context, Object value, Class toType) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try {
if(toType == Date.class){//当字符串向Date类型转换时
String[] params = (String[]) value;// Request.getParameterValues()
return dateFormat.parse(params[0]);
}else if(toType == String.class){//当Date转换成字符串时
Date date = (Date) value;
return dateFormat.format(date);
}
} catch (ParseException e) {}
return null;
}
}


将上面的类型转换器注册为局部类型转换器

在Action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是Action的类名,后面的-conversion.properties是固定写法,对于本例而言,文件的名称应为HelloWorldAction-conversion.properties 。在properties文件中的内容为:

属性名称=类型转换器的全类名

对于本例而言, HelloWorldAction-conversion.properties文件中的内容为:

createtime= com.jim.conversion.DateConverter

 


自定义全局类型转换器

将上面的类型转换器注册为全局类型转换器:

WEB-INF/classes下放置xwork-conversion.properties文件 。在properties文件中的内容为:

待转换的类型=类型转换器的全类名

对于本例而言, xwork-conversion.properties文件中的内容为:

java.util.Date= com.jim.conversion.DateConverter

 


可以使用struts2框架自带的类型转换器StrutsTypeConverter

public class User2Converter extends StrutsTypeConverter {

@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
String val=values[0];
StringTokenizer st=new StringTokenizer(val, ";");
String username=st.nextToken();
String password=st.nextToken();
User user=new User();
user.setUsername(username);
user.setPassword(password);
return user;
}

@Override
public String convertToString(Map context, Object o) {
User user=(User) o;
String username=user.getUsername();
String password=user.getPassword();
return "username:"+username+",password:"+password;
}

}






posted @ 2011-12-14 21:57  一直在等  阅读(761)  评论(0编辑  收藏  举报