在HTML表单中的文本框里输入的不管是数值类型还是字符类型,最后都是以String类传到后台。如果后台bean的属性是int、double、Date等,struts2就会自动把字符类型转换成相应的类型。
一.局部类型转换
1.名称格式:action类名+-conversion.properties
2.位置:放在与之相对应action类的同包下
3.properties文件内容格式:转换属性=转换处理类
4.转换处理类:继承StrutsTypeConverter实现convertFromString方法和convertToString方法
5.具体处理流程:
(1)输入:HTML表单提交—Action类处理—执行属性setter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用其中convertFromString转换方法-把返回值通过setter方法给action中属性赋值。
(2)输出:Action类处理—执行属性getter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用其中convertToString转换方法-把返回值通过getter方法输出到页面。
二.全局类型转换(页面中所有用到改bean的都会被类型转换)
1.名称格式:xwork-conversion.properties
2.位置:src根目录下
3.properties文件内容格式:bean类=转换处理类
三.主要代码
1、xwork-conversion.properties(全局)
#com.test.bean.Point=com.test.converter.PointConverter
2.PointAction-conversion.properties(局部)
#point=com.test.converter.PointConverter
#point2=com.test.converter.PointConverter
#point3=com.test.converter.PointConverter
#point=com.test.converter.PointConverter3
Java转换代码:
PointConverter.Java
package com.test.converter;
import java.util.Map;
import ognl.DefaultTypeConverter;
import com.test.bean.Point;
/**
* @author 作者:zlp E-mail: jxzlp123@163.com
* @version 创建时间:2010-9-12 下午01:21:30
* 类说明
*/
public class PointConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
if(Point.class==toType)
{
Point point =new Point();
String[] str=(String[])value;
String[] paramValues=str[0].split(",");
int x=Integer.parseInt(paramValues[0]);
int y=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
return point;
}
if(String.class==toType){
Point point=(Point)value;
int x=point.getX();
int y=point.getY();
String result="[x="+x+", y="+y+"]";
return result;
}
return null;
}
}
PointConverter2.Java
package com.test.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.test.bean.Point;
/**
* @author 作者:zlp E-mail: jxzlp123@163.com
* @version 创建时间:2010-9-12 下午07:52:22
* 类说明
*/
public class PointConverter2 extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Point point=new Point();
String[] str=(String[])values;
String[] paramValues=str[0].split(",");
int x=Integer.parseInt(paramValues[0]);
int y=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
return point;
}
@Override
public String convertToString(Map context, Object o) {
Point point=(Point)o;
int x=point.getX();
int y=point.getY();
String result="[ x = "+ x+", y ="+ y+"]";
return result;
}
}
PointConverter3.Java
package com.test.converter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.test.bean.Point;
/**
* @author 作者:zlp E-mail: jxzlp123@163.com
* @version 创建时间:2010-9-12 下午08:39:35
* 类说明
*/
public class PointConverter3 extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
List<Point> list=new ArrayList<Point>();
for (String value:values) {
Point point=new Point();
String[] paramValues=value.split(",");
int x=Integer.parseInt(paramValues[0]);
int y=Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
list.add(point);
}
return list;
}
@SuppressWarnings("unchecked")
@Override
public String convertToString(Map context, Object o) {
List<Point> list = (List<Point>) o;
StringBuilder sb = new StringBuilder();
sb.append("[ ");
int number = 0;
for (Point point : list) {
++number;
int x = point.getX();
int y = point.getY();
sb.append(number).append(" x=").append(x).append(",y=").append(y)
.append(" ");
}
sb.append("]");
return sb.toString();
}
}
在最后调用
<body>
<h3><font color="red">用逗号将坐标分隔开</font></h3>
<s:form action="pointConverter">
<s:textfield name="point.x" label="x"></s:textfield>
<s:textfield name="point.y" label="y"></s:textfield>
<s:textfield name="age" label="age"></s:textfield>
<s:textfield name="username" label="username"></s:textfield>
<s:textfield name="date" label="date"></s:textfield>
<s:submit name="submit" label="submit"></s:submit>
</s:form>
</body>
时 在javabean中重写toString()方法
@Override
public String toString() {
return "x="+x+", y="+y;
}