Struts2的自定义类型转换器:
1、 要转换的实体类:Circle.java
package com.fql.struts2.convert;
public class Circle {
private int id;
private float width;
private float height;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public float getWidth() {
return width;
}
public void setWidth(float width) {
this.width = width;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
}
2、 自定义的类型转换器:CircleConverter.java
package com.fql.struts2.convert;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class CircleConverter extends StrutsTypeConverter{
//此方法中的arg1参数为字符串数组,实际传递进来的参数情况如:?circle=2,3&circle=4,5&circle=6,7。参数名相同,参数值不同。但在此只支持一个参数,不支持数组。
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
Circle circle=new Circle();
for (int i = 0; i < arg1.length; i++) {
String[] c = arg1[i].split(",");
int w=Integer.parseInt(c[0]);
int h=Integer.parseInt(c[1]);
circle.setHeight(h);
circle.setWidth(w);
}
return circle;
}
public String convertToString(Map arg0, Object arg1) {
Circle circle=(Circle)arg1;
return "("+circle.getWidth()+","+circle.getHeight()+")";
}
}
3、 自定Action类:TestAction.java
package com.fql.struts2.convert;
public class TestAction {
private int id;
private Circle circle;//存在一个circle属性,将对它进行转换。
//此方法是页面访问Action的方法。
public String cal(){
return "cal_success";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Circle getCircle() {
return circle;
}
public void setCircle(Circle circle) {
this.circle = circle;
}
}
4、 TestAction-conversion.properties文件实现局部的自定义转换器,
此文件和TestAction.java文件在同一目录下:
circle=com.fql.struts2.convert.CircleConverter
5、 Struts的配置文件:struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="simple" namespace="/simple" extends="struts-default">
<action
name="cal"
class="com.fql.struts2.convert.TestAction"
method="cal"
>
<result name="cal_success">/struts2/circle.jsp</result>
</action>
</package>
</struts>
6、 JSP的访问页面:
<a href="simple/cal.action?circle=3,4">类型转换:</a>
7、 输出结果:
椭圆:(3.0,4.0)
对上一个实例的修正:
1、自定义的要转换的类型:
package com.fql.struts2.convert;
public class Circle {
private int id;
private float width;
private float height;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public float getWidth() {
return width;
}
public void setWidth(float width) {
this.width = width;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
}
2、自定的转换器(返回的为Circle的数组):CircleConvert.java
package com.fql.struts2.convert;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class CircleConverter1 extends StrutsTypeConverter{
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
Circle circles[]=new Circle[arg1.length];
for (int i = 0; i < arg1.length; i++) {
Circle circle=new Circle();
String[] c = arg1[i].split(",");
int w=Integer.parseInt(c[0]);
int h=Integer.parseInt(c[1]);
circle.setHeight(h);
circle.setWidth(w);
circles[i]=circle;
}
return circles;
}
public String convertToString(Map arg0, Object arg1) {
Circle circle[]=(Circle[])arg1;
StringBuffer sb=new StringBuffer();
for (int i = 0; i < circle.length; i++) {
Circle circle2 = circle[i];
sb.append("(")
.append(circle2.getWidth())
.append(",")
.append(circle2.getHeight())
.append(") ");
}
}
}
3、定义Action:
package com.fql.struts2.convert;
public class TestAction {
private int id;
private Circle circle[];
public String cal(){
return "cal_success";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Circle[] getCircle() {
return circle;
}
public void setCircle(Circle[] circle) {
this.circle = circle;
}
}
4、Struts的配置文件:struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="simple" namespace="/simple" extends="struts-default">
<action
name="cal"
class="com.fql.struts2.convert.TestAction"
method="cal"
>
<result name="cal_success">/struts2/circle.jsp</result>
</action>
</package>
</struts>
5、类型转换的配置文件(此配置是全局的,要把此文件放到类的根目录,即src目录下)
文件名为xwork-conversion.properties
com.fql.struts2.convert.Circle=com.fql.struts2.convert.CircleConverter1:
6、对应的JSP文件:
<a href="simple/cal.action?circle=6,4&circle=119,43">类型转换:</a>
7、输出结果:椭圆:6,4, 119,43