struts2中的类型转化 Converter

本文介绍如何在Struts框架中实现自定义转换器,以处理特定类型的对象转换。通过实例展示了不同类型的Point对象转换器的实现方法,包括单个对象及集合类型的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts.xml:
<action name="pointConverter" class="com.liming.action.PointAction">
<result>/person/output.jsp</result>
<result name="input">/person/input.jsp</result>
</action>



对象:用户输入记录坐标,以,分割
public class Point {
private int x;
private int y;
/**
* @return the x
*/
/**
* @return the x
*/
public int getX() {
return x;
}
/**
* @param x the x to set
*/
public void setX(int x) {
this.x = x;
}
/**
* @return the y
*/
public int getY() {
return y;
}
/**
* @param y the y to set
*/
public void setY(int y) {
this.y = y;
}

}

input.jsp:

<s:form action="pointConverter">
<s:textfield name="point" label="point"></s:textfield>
<s:textfield name="age" label="age"></s:textfield>
<s:textfield name="username" label="username"></s:textfield>
<s:textfield name="date" label="birthday"></s:textfield>
<s:submit label="submit" />
</s:form>



第一种Converter:


public class PointConverter extends DefaultTypeConverter {


public Object convertValue(Map context, Object value, Class toType) {
if(Point.class ==toType){
System.out.println("toPoint");
String[] str = (String[])value;
String[] k = str[0].split(",");
Point p = new Point();
p.setX(Integer.parseInt(k[0]));
p.setY(Integer.parseInt(k[1]));
return p;
}
if(String.class == toType){
System.out.println("toString");
Point point = (Point)value;
String s = "x="+point.getX()+" y="+point.getY();
return s;
}
return null;
}

/**第二种Converter:
***/
public class PointConverter2 extends StrutsTypeConverter {

@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
String[] str = (String[])values;
String[] k = str[0].split(",");
Point p = new Point();
p.setX(Integer.parseInt(k[0]));
p.setY(Integer.parseInt(k[1]));
return p;
}

@Override
public String convertToString(Map context, Object o) {
Point point = (Point)o;
String s = "x="+point.getX()+" y="+point.getY();
return s;
}

}


================================================================================================集合类型============================================
这时候一定要定义当前类的PointAction-converter.properties,不然根据全局不会产生length STRING[]数组
jsp:
   <s:form action="pointConverter">
<s:textfield name="point" label="point"></s:textfield>
<s:textfield name="point" label="point"></s:textfield>
<s:textfield name="point" label="point"></s:textfield>
</s:form>



converter:
public class PointConverter3 extends StrutsTypeConverter {

@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
List<Point> points = new ArrayList<Point>();
for(String str :(String[])values){
String[] k = str.split(",");
Point p = new Point();
p.setX(Integer.parseInt(k[0]));
p.setY(Integer.parseInt(k[1]));
points.add(p);}
return points;
}

@Override
public String convertToString(Map context, Object o) {
List<Point> points = (List<Point>)o;
StringBuilder sf = new StringBuilder();
sf.append("[");
for(Point point : points){
sf.append("x=").append(point.getX()).append(", y=").append(point.getY());
}
sf.append("]");
return sf.toString();
}
}


=======================================
xwork-converter.properties

com.liming.bean.Point=com.liming.converter.PointConverter3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值