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

struts2的类型转换

2009-09-06 23:20 337 查看
struts2实际上是通过ognl表达式来实现类型转换的。

将jsp页面中的值转换成int, date, point(一个自定义类,包含x,y两个int类型的属性)的类型

java基本类型可以自动转换,对象类型须写转换器。date类型要写成日期格式的字符串,如2008-8-8

jsp

input.jsp

<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="birthday"></s:textfield>

<s:submit label="submit"></s:submit>

</s:form>

entity

public class Point{

private int x;

private int y;

}

action

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

import com.test.bean.Point;

public class PointAction extends ActionSupport {

private Point point;

private int age;

private String username;

private Date date;

public Point getPoint() {

return point;

}

public void setPoint(Point point) {

this.point = point;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public Date getDate() {

return date;

}

public void setDate(Date date) {

this.date = date;

}

@Override

public String execute() throws Exception {

return SUCCESS;

}

}

converter

point类的转换器

import java.util.Map;

import ognl.DefaultTypeConverter;

import com.test.bean.Point;

public class PointConverter extends DefaultTypeConverter {

@Override

public Object convertValue(Map context, Object value, Class toType) {

   //如果toType的类型是Point,那么toType就是目标类型,value就是源类型。

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;  //返回的值会对应到action中的setter方法

}

if(String.class == toType) {

Point point = (Point)value;

int x = point.getX();

int y = point.getY();

String result = "[x=" + x + " , y=" + y + "]";

return result;  //返回的值会对应到页面上的point元素,也就是action中的getter方法

}

return null;

}

}

当从页面将String类型转换为Point类型时会调用setter方法,当发现Point不是一个基本类型时会调用converter并执行第一个if;

当页面获取action中的属性时会调用其getter方法,并执行converter中的第二个if。

struts2.xml

<action name="pointConverter" class="com.test.action.PointAction">

<result name="success">/output.jsp</result>

<result name="input">/input.jsp</result>

</action>

配置文件

PointAction-conversion.properties

  
PointAction必须与action类同名,-conversion.properties
是固定的格式,并且此文件必须与对应的action在同一个包下。 

point=com.test.converter.PointConverter

  是指对PointAction中的point这个属性,用PointConverter这个转换类进行转换。

  要对同一action中多个属性进行转换,可以写多行配置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: