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

Struts2类型转换的作用

2014-08-20 23:27 337 查看

1、Struts2类型转换的作用

  在Web应用中,页面提交请求的参数都是字符串类型的。但是在学习中,我们都是直接在Action中按照需要来定义属性的类型,比如private int age,也没有出错,还能正确运行,这是怎么回事呢?这是由Struts2的类型转换框架默默的帮助我们完成的功能,只要用户输入的数据能合理的转换为需要的属性的类型,Struts2的类型转换框架就会在execute方法执行之前,替我们将参数转换为合适的类型。

2、Struts2自定义类型转换器

1、概述

  虽然内建类型转换器能满足绝大多数的需求,但有的时候还是需要使用自定义类型转换器来实现特定的需求。这个时候就需要自定义类型转换器了。

2、实现自定义类型转换器

  自定义类型转换器的实现非常简单,写一个类,继承StrutsTypeConverter抽象类,这个抽象类有两个方法需要我们实现:

  public Object convertFromString(Map context, String[] values, Class toClass)方法,实现字符串向对象的转换,它有三个参数:

    context:转换上下文,可以在里面引用各种对象,比如:可以通过context.get(ValueStack.VALUE_STACK)来引用值栈。

    values:用户输入的字符串。

    toClass:将要被转换成的对象类型。

  public String convertToString(Map context, Object o)方法,实现对象向字符串的转换,它有两个参数:

    context:同上,也是转换的上下文。

    o:需要被转换的对象。

  需要注意在convertFromString方法中,用户输入的字符串很可能是不符合要求的,所有的不符合要求的情况都要抛出TypeConversionException。这是个运行时异常,不需要在方法上声明抛出。

3、注册和引用自定义类型转换器

  首先要注册这个自定义类型转换器处理。在src下建立一个xwork-conversion.properties文件,这个文件中用“全类名=这个类对应的类型转换器全类名”,来建立类和类型转换器的关系。放在src目录下属于全局的类型转换器。对局部类型转换,在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是类名,后面的-conversion.properties是固定的写法。配置局部类型转换器比如HelloWorldAction中有个域属性是circle属于Circle类,ActionClassName-conversion.properties文件的配置是
circle=自定义转换器的包路径;配置全局类型转换器在xwork-conversion.properties中添加一行 Circle类路径=自定义转换器的包路径



当然,在使用局部类型转换器引用的时候,只对这个文件名指定的Action有效,对其他Action无效。另外一个重要的点就是:局部类型转换器的引用会覆盖全局类型转换器的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息