(本文的参考资料是Java Web开发 应用详解 独门架构)
首先我们要明白一点:
在Web应用中,所有的请求参数都是以字符串形式的,但是有时候我们需要获取这些参数,进行用Java进行处理,这时,就需要进行类型转换了。
Struts2的类型转换有三种方式:
内置类型转换器;
ognl类型转换器;
Struts类型转换器
这三种方式各有优缺点,在这里就不多做比较了。
现在我以Struts类型转换器为例,进行说明:
首先新建一个Product类:
public class Product {
private String name;
private float price;
private int count;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public float getPrice() {
return price;
}
public void setPrice(float price){
this.price=price;
}
public int getCount(){
return count;
}
public void setCount(int count){
this.count=count;
}
}
然后在新建一个Action类:
public class ProductAction extends ActionSupport {
private Product product;
public void setProduct(Product product){
this.product=product;
}
public Product getProduct(){
return product;
}
public String execute(){
return SUCCESS;
}
}
好了,现在开始写Struts类型转换器,我们要继承抽象类StrutsTypeConverter,并且实现其中的两个抽象方法:
//字符串转换成目标类型
public abstract Object convertFromString(Map context, String[] values, Class toClass);
//目标类型转换成字符串
public abstract String convertToString(Map context, Object o);
现在Struts转换器类型是
public class StrutsProductConverter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
// TODO Auto-generated method stub
Product product = new Product();
String[] productValues = arg1[0].split(",");
product.setName(productValues[0].trim());
product.setPrice(Float.parseFloat(productValues[1].trim()));
product.setCount(Integer.parseInt(productValues[2].trim()));
System.out.println("我执行的是Struts2中默认的转换器");
return product;
}
@Override
public String convertToString(Map arg0, Object arg1) {
// TODO Auto-generated method stub
Product product = new Product();
return product.getName()+","+product.getPrice()+","+product.getCount();
}
}
然后再写一个配置文件名字是:xwork-conversion.prpperties,该文件中的内容是:
包名.Product=包名.转换器类
在本例中,Product类所在的包是product,StrutsProductConverter类所在的包是converter,所以在文件中应该写:
product.Product = converter.StrutsProductConverter