一共包含两部分:
1.全局类型转换
2.开发中使用的转化类继承 StrutsTypeConverter
2.集合类型转换
1.全局类型转换
当有多个Action用到同一个数据对象,且需要进行类型转换
方法一:局部类型转换,为每个action的 XXAction-conversion.properties中配置【见上一篇】
方法二:全局类型转换,设置一个全局的properties文件
配置文件名【固定】: xwork-conversion.properties
配置文件路径:classes下,即直接在src中new,与struts.xml位于同一文件夹下
内容: 需转换对象的类=转换类路径【与局部配置文件不同】
com.test.bean.Point=com.test.converter.PointConverter
2.开发中使用的转化类继承自 StrutsTypeConverter 而非直接继承 DefaultTypeConverter
StrutsTypeConverter为DefaultTypeConverter的子类
所以在上一篇中的类型那个转化类改写为如下
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.test.bean.Point;
public class PointConverter2 extends StrutsTypeConverter {
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
Point point = new Point();
String[] xy = arg1[0].split(",");
int x = Integer.parseInt(xy[0]);
int y = Integer.parseInt(xy[1]);
point.setX(x);
point.setY(y);
return point;
}
public String convertToString(Map arg0, Object arg1) {
Point point = (Point)arg1;
int x = point.getX();
int y = point.getY();
String result="[x="+x+" y="+y+"]";
return result;
}
}
3.集合类型转换
A.Action中有一集合对象point
public class PointAction extends ActionSupport {
private List point;
public List getPoint() {
return point;
}
public void setPoint(List point) {
this.point = point;
}
public String execute() throws Exception {
return SUCCESS;
}
}
B.对应的转化类
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.test.bean.Point;
public class PointConverter3 extends StrutsTypeConverter {
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
List list = new ArrayList();
for(int i=0;i<arg1.length;i++)
{
Point point = new Point();
String[] str=arg1[i].split(",");
int x = Integer.parseInt(str[0]);
int y = Integer.parseInt(str[1]);
point.setX(x);
point.setY(y);
list.add(point);
}
return list;
}
public String convertToString(Map arg0, Object arg1) {
List list =(List)arg1;
StringBuffer result= new StringBuffer();
for(int i=0,len=list.size();i<len;i++)
{
Point p = (Point)list.get(i);
result.append("x"+(i+1)+"="+p.getX()+" y"+(i+1)+"="+p.getY());
}
return result.toString();
}
}
C.在PointAction-conversion.properties中配置
point=com.test.converter.PointConverter3
D.input.jsp中,多个点输入使用的name相同
<h3><font color="red">使用逗号将点的坐标隔开 </font></h3>
<s:form action="pointCoverter">
<s:textfield name="point" label="坐标"></s:textfield>
<s:textfield name="point" label="坐标2"></s:textfield>
<s:textfield name="point" label="坐标3"></s:textfield>
<s:textfield name="age" label="年龄"></s:textfield>
<s:textfield name="date" label="生日"></s:textfield>
<s:textfield name="username" label="姓名"></s:textfield>
<s:submit label="提交"></s:submit>
</s:form>
E.output.jsp显示结果
坐标<s:property value="point"/><br>
年龄:<s:property value="age"/><br>
姓名:<s:property value="username"/><br>
生日:<s:property value="date"/><br>
整体流程与上一篇博文中介绍一致