Structs2笔记③--局部类型转换案例

Structs2的类型转换—局部类型转换

Ognl强大的表达式语言,在导入项目的时候我们导入了ognl.jar包,内有TypeConverter类,struct主要依赖于他进行类型转换。

例子

 

input.jsp

<%@ taglib prefix="s" uri="/struts-tags"%>

<h3><font color="red">使用都逗号将点的两个坐标分隔开</font></h3>

    <s:form action="/new/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 loabel="submit"></s:submit>

    </s:form>

 

对应的坐标实体

Point.Java

package com.test.bean;

 

public class Point {

    private int x;

    private int y;

    public int getX() {

        return x;

    }

    public void setX(int x) {

        this.x = x;

    }

    public int getY() {

        return y;

    }

    public void setY(int y) {

        this.y = y;

    }

}

 

 

 

自定义的类型转换类PointConverter,继承DefaultTypeConverter,重写convertValue

方法

package com.test.convertr;

 

import java.lang.reflect.Member;

import java.util.Map;

 

import com.test.bean.Point;

 

import ognl.DefaultTypeConverter;

/**

* 自定义的转换类

* @author Administrator

*

*/

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;

    }

}

 

写与表单相对应的PointAction类

package com.test.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 birthday;

    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 getBirthday() {

        return birthday;

    }

    public void setBrithday(Date birthday) {

        this.birthday = birthday;

    }

    @Override

    public String execute() throws Exception {

        return SUCCESS;

        

    }

}

告诉struct 我的Point属性使用我自己写的转换类转换。

在Action目录下建立PointAction-conversion.properties文件

point=com.test.convertr.PointConverter

 

配置structs.xml

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

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

</action>

 

建立output.jsp

<%@ taglib prefix="s" uri="/struts-tags"%>

point:<s:property value="point"/><br>

    age:<s:property value="age"/><br>

    username:<s:property value="username"/><br>

    date :<s:property value="date"/>

posted @ 2015-08-24 11:22  coder程  阅读(204)  评论(0编辑  收藏  举报