Struts2开发--类型转换(二)

2014-11-24 07:11:42 · 作者: · 浏览: 2
lic Map getMaps() {
return maps;
}
public void setMaps(Map maps) {
this.maps = maps;
}

}

Conversion02Action-conversion.properties


Element_lists=org.person.Person
Key_maps=java.lang.String
Element_maps=org.person.Person

2.jsp


<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>




Insert title here














Conversion02Action-conversion.properties


Element_lists=org.person.Person
Key_maps=java.lang.String
Element_maps=org.person.Person







三、自定义类型转换器

1.继承DefaultTypeConverter


如果我们自定义一个类型转换器,第一种方法是继承DefaultTypeConverter,并重写public Object convertValue(ActionContext context,Object value,Class toType);
这个函数的功能是完成双向转换,即从String数组转到Action属性及Action属性转到String;需要注意的是从String数组转到Action属性,而不是String转到Action属性;如果只有一个字符串,则取params[0] 即可;

因此一般此函数的模板代码如下:


public Object convertValue(Map context, Object value,
Class toType) {
if(toType==String.class){
......
return String;
}
else if(toType==Action属性.class){
String params[] = (String[])value;//必须是字符串数组
.......
return Action属性;
}
return null;
}

完成自定义类型转换器编写后,如果需要使用此转换器,就需要配置,通常有两种配置方法:
1.局部类型转换文件中配置,仅对特定的Action的特定属性有效,比如在Action1中有aa属性,则仅对Action1的aa属性有效;
2.全局类型转换文件中配置,对某个类型都有效;比如对Person注册了类型转换器,则对任何Person和String的转换都有效;

全局类型转换文件命名为:xwork-conversion.properties,通常放在WEB-INF\classes下;
文件内容如:attributeName=ConvertClass ,比如aa=org.convert.Converter1
attributeName表示属性名称,convertClass表示转换器的实现类;
局部类型转换文件命名为:ActionName-conversion.properties,放在特定Action的目录下;
文件内容如:typeName=ConvertClass,比如org.person.Person = org.convert.Converter2

注意:typeName表示转换类型,convertClass表示转换器的实现类;

代码示例:

Conversion03Action.java


package org.conversion.action;

import org.person.Person;

import com.opensymphony.xwork2.ActionSupport;

public class Conversion03Action extends ActionSupport {

private Person p ;
public String execute()throws Exception{
System.out.println(p.getGender());
System.out.println(p.getSalary());
return SUCCESS;
}
public Person getP() {
return p;
}
public void setP(Person p) {
this.p = p;
}

}

Converter01.java


package org.converter;

import java.util.Map;

import org.person.Person;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class Converter01 extends DefaultTypeConverter {

@Override
public Object convertValue(Map context, Object value,
Class toType) {
if(toType==String.class){
Person p = (Person)value;
return p.getSalary()+","+p.getGender();
}
else if(toType==Person.class){
String params[] = (String[])value;
String[]values = params[0].split("\\,");
Person p = new Person();
p.setGender(values[1]);
p.setSalary(Double.parseDouble(values[0]));
return p;
}
return null;
}

}

3.jsp


<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>




Insert title here










Conversion03Action-conversi