您的位置:首页 > 编程语言 > Java开发

Struts2类型转换

2010-09-12 21:06 323 查看
在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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: