`
guohf
  • 浏览: 417482 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

继承ognl中DefaultTypeConverter实现类型转换

阅读更多

1.       创建含有需要类型转化对象的JSP页面(input.jsp,里面表单里含有自定义类)

<body>

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

    <s:form action="Register">

          

<s:textfield name="point" label="point"/>

       <s:textfield name="age" label="age"/>

       <s:textfield name="username" label="username"/>

       <s:textfield name="date" label="birthday"/>

          

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

    </s:form>

    </body>

2.  创建信息输出JSP页面(out.jsp)

<html>

     <head>

        <title>My JSP 'output.jsp' starting page</title>

    </head>

     <body>

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

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

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

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

     </body>

</html>

3.       创建上面JSP页面中需要类型转换的对象所对应的类(Point.java)

public class Point

{

    private int x;

    private int y;

    //getter、setter方法

}

4.  创建form提交接受的Action(RegisterAction.java)

public class RegisterAction extends ActionSupport

{

    private Point point;

    private int age;

    private String username;

    private Date data;

//getter、setter方法

   

    @Override

    public String execute() throws Exception

    {

       return SUCCESS;

    }

}

5.  Struts.xml中配置RegisterAction

<action name="Register" class="com.test.action.RegisterAction">

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

</action>

6.  创建能转换Point的类(PointConvert.java)

注意:与StrutsTypeConverter方式的转换不同之处!

public class PointConverter extends DefaultTypeConverter

{

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;

}

}

引入参数中的toType表示的是目标类型(是字符串类型还是Point类型),

当客户端string提交到pointConvert这个action时候(即:toType==Point.class),value指的是textfield中填写的字符串。

对if(Point.class==toType)过程解释:

(1) String[] str=(String[])value;-----------------将value显示转化为字符数组后赋值为数组str[];

(2)String[] paramValues=str[0].split(",");-------取出str[]的第一个元素,即:str[0],当textfield里填写的是“20,40”,str[0]里的内容也就是一个字符串“20,30”,然后通过str[0].split(“,”)将字符串“20,30”以逗号为界限拆分成一个数组并赋值给paramValues[],这时paramValues[]里内容是{“20”,”30”};

(3) int x=Integer.parseInt (paramValues [0]);-----将字符串类型的“20”转换为integer型赋值给x;

7.       配置属性文件使得让Point属性由PointConvert处理:

⑴  在和要被convert的类的同目录下新建一个文件:

RegisterAction -conversion.properites。

RegisterAction --------要转换的属性所在的类的类名

-conversion.properies-----固定格式

⑵填写属性文件内容:

point=com.test.converter.PointConvert

point--------具体要转换哪一个属性

com.test.converter.PointConverter-----具体用那个convert类来转换point

注意:如果对多个属性进行转换可以添加多个如point=com.test.converter.PointConvert

形式的内容。 

8. 程序运行流程

运行流程分两步:一、字符串字段被转化为对应数据类型字段上传到action中;二、对应字段被转化为字符串类型字段显示在输出页面;

第一步:input.jsp提交表单---->进入表单提交的action(Register.action),在此action里接受表单穿过来的各个字段,是基本数据类型字段struts2会自动进行对其转换,如果遇到对象类型字段则进入此action所在的目录查找转换配置文件(RegisterAction-convertion.properties),在转换配置文件中查找处理此对象数据类型的类(PointConverter.java)---->对象类型转化类将form提交过来的与对象类型相关的字符串转化为对象实例->转化后的对象实例被设置(set)到action中;

第二步:action(Register.action)中的众多字段里,如果是基本数据类型字段的struts2会自动转换为字符串类型字段发送到输出页面(out.jsp), 如果是对象类型字段则会进入action(Register.action)中找转换配置文件(RegisterAction-convertion.properties),在转换配置文件中查找处理此对象数据类型的类(PointConverter.java)---->对象类型抓换类将action中的对象类型字段转换为相应字符串字段---->转换后的字符串实例被get到输出页面。

9.       定义全局类型转换

上面所演示的是局部类型转换方式,假如有四个action,分别为PointAction1、PointAction2、PointAction2、PointAction4,每个PointAction里面都有一个相同的point属性需要转换,所以必须在com.test.action包下面创建四个属性文件指定每个PointAction都需要ActionConvert类进行转换,即:

PointAction1-coversion.properties,PointAction2-coversion.properties, PointAction3-coversion.properties,PointAction4-coversion.properties

如果更多类需要转换,显然这种方式比较累人,这种情况可以考虑使用全局类型转换。

配置步骤:

(1)  在src目录下创建全局属性文件,文件名为:

xwork-conversion.properties 文件名是固定不变的。

(2) 全局属性文件内容:

com.test.bean.Point=com.test.converter.PointConverter

等号左边是要转换的类所在的包名,右边是具体用那个convert类来转换point。

分享到:
评论

相关推荐

    实验4 Struts2的类型转换与OGNL表达式语言.doc

    - **继承基类**:自定义类型转换器需要继承`ognl.DefaultTypeConverter`。 - **实现方法**:重写`convertValue`方法来实现具体的转换逻辑,包括从字符串到目标类型的转换以及反向转换。 例如,在提供的实验内容中,...

    Struts2自定义类型转换

    1. **继承`ognl.DefaultTypeConverter`**:这是原始的类型转换器接口,提供基础的类型转换功能。 2. **继承`org.apache.struts2.util.StrutsTypeConverter`**:这是`DefaultTypeConverter`的增强版,提供了更高级的...

    Struts2的自动类型转换及自定义类型转换[文].pdf

    这个过程在Struts2中是自动的,通过OGNL(对象图形导航语言)表达式来实现。 类型转换在Struts2中扮演着关键角色,因为它使得开发者无需手动处理字符串到其他类型的数据转换。Struts2内置了一系列常见的类型转换器...

    struts2数据类型转换

    然而,对于一些自定义的数据类型或复杂的数据结构,可能需要开发者自行实现类型转换器。 #### 四、自定义类型转换器实现 Struts2提供了两种主要的方式来实现自定义类型转换器: ##### 1. 基于OGNL的类型转换器 -...

    Struts2学习教程之自定义类型转换器的方法

    要实现自定义类型转换器,首先需要了解OGNL(Object-Graph Navigation Language)框架中的TypeConverter接口。Struts2的类型转换是基于OGNL实现的,因此自定义转换器需要实现这个接口。然而,TypeConverter接口的`...

    关于Struts2的类型转换详解

    开发者可以通过实现这个接口创建自定义的类型转换器,或者继承`ognl.DefaultTypeConverter`简化实现过程。`convertValue`方法是核心,它负责执行实际的类型转换,无论是将对象转换为字符串,还是将字符串转换为对象...

    一篇文章搞定Struts2的类型转换

    Struts2还提供了一个名为`StrutsTypeConverter`的类,它继承自`DefaultTypeConverter`,简化了自定义类型转换器的实现。我们可以直接继承`StrutsTypeConverter`而不是`DefaultTypeConverter`,这样可以利用Struts2的...

    struts2学习笔记

    自定义转换器需要继承OGNL的DefaultTypeConverter类,重写convertValue方法。转换器的配置可以通过在Action类同级目录下创建Action-conversion.properties文件来实现,其中指定需要转换的属性名和转换器类。全局类型...

    深入学习struts2

    自定义转换器通过实现Struts2的TypeConverter接口,或者继承DefaultTypeConverter类来实现。你需要重写`convertValue()`方法,根据实际需求进行转换。注册自定义类型转换器有三种方式:局部类型转换器、全局类型转换...

    struts2.2学习笔记

    第一种是`DefaultTypeConverter`,它是OGNL继承下来的基础类型转换器,包含了两个`convertValue()`重载方法,其中3参数版本尤为重要。第二种是`StrutsTypeConverter`,它是默认类型转换器的子类,提供了更简单的抽象...

    Java Web整合开发王者归来

    为了实现自定义的数据类型转换器,我们需要创建一个类来实现`ognl.TypeConverter`接口。通常情况下,我们会选择继承`DefaultTypeConverter`类,并重写`convertValue()`方法。 ##### 3.2 示例:日期转换器 以下是一...

    java详解教程-structs 2

    - **局部类型转换**:适用于单个Action,例如将电话号码的字符串转换为自定义的`TelephoneNumber`类,需要编写相应的转换类实现`TypeConverter`接口或继承`DefaultTypeConverter`类,并在配置文件中指定。...

    struts2自制复习标签

    转换类需继承`StrutsTypeConverter`或`DefaultTypeConverter`,并实现相应的方法来处理数据类型转换。 Struts2的标签库极大简化了视图层的开发。例如: - `&lt;s:bean&gt;`标签可以创建对象并调用其属性和方法,使用OGNL...

    开发的包个人使用

    - **默认类型转换器**:Struts 2默认使用`DefaultTypeConverter`进行基本类型的转换,例如字符串到整数或日期等。开发者可以通过配置`action-conversion.properties`文件来自定义更复杂的转换规则。 - **自定义转换...

    struts2入门实例4 经典入门必备

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

    struts2入门实例3 经典入门必备

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

    struts2入门实例2 经典入门必备

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

    struts2入门实例1

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

Global site tag (gtag.js) - Google Analytics