精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-26
11.3 自定义类型转换器11.3.1概述虽然内建类型转换器能满足绝大多数的需求,但是,有的时候还是需要使用自定义类型转换器来实现特定的需求。 还是用前面的长方形来说明,如果用两个文本框分别输入长方形的高和宽,整个类型装换都没有问题,它可以工作的很好。 但是,如果我们想在一个文本框内同时输入宽和高(width:height),形如16:9,这个时候就需要自定义类型转换器了。 11.3.2实现自定义类型转换器自定义类型转换器的实现非常简单,写一个类,继承StrutsTypeConverter抽象类,该类在org.apache.struts2.util包内,这个抽象类有两个方法需要我们实现:
l context:转换上下文,可以在里面引用各种对象,比如:可以通过context.get(ValueStack.VALUE_STACK)来引用值栈。 l values:用户输入的字符串。 l toClass:将要被转换成的对象类型。
l context:同上,也是转换的上下文。 l o:需要被转换的对象。 实现示例功能的自定义类型转换器,示例代码如下:
java代码:
在这里,需要注意在convertFromString方法中,用户输入的字符串很可能是不符合要求的,所有的不符合要求的情况都要抛出TypeConversionException。这是个运行时异常,不需要在方法上声明抛出。 11.3.3注册和引用自定义类型转换器已经有了自定义类型转换器,应该怎么引用它呢? 1:注册自定义类型转换器 首先要注册这个自定义类型转换器处理。在src下建立一个xwork-conversion.properties文件,这个文件中用“全类名=这个类对应的类型转换器全类名”,来建立类和类型转换器的关系,对于我们来说,只有一行:
java代码:
注册完了之后,整个项目所有的长方形,都可以用自定义的类型转换器来处理了。 2:示例用的Action Action不需要做任何特殊的处理,也就是使用自定义类型转换器的时候,对Action没有影响,请大家记住。对应的Action的示例代码为:
java代码:
3:修改页面 那么,使用了自定义类型转换器对哪里有影响呢?对页面有影响,既对提交页面有影响,也对展示页面有影响。 在提交页面上,不需要再有两个文本框分别对应长方形的高和宽了,只需要一个文本框,而这个文本框对应的不再是长方形的属性(比如rectangle.width或rectangle.height),而是对应整个长方形对象(rectangle)了,而且这个文本框需要按照自定义类型转换器预定的字符串格式填写,这里定义的是宽:高。 提交页面示例代码如下:
java代码:
显示结果的页面也需要跟随变动,示例代码如下:
java代码:
4:测试 运行测试一下,在输入页面的文本框中填入16:9,然后点击提交,Action就可以正确接到这个长方形对象,然后转向输出页面,显示如下: 图11.1 示例自定义转换器 在展示页面上使用的<s:property value="rectangle"/>,就可以显示出自定义类型转换器中convertToString方法的返回值了。 注意:<s:property value="rectangle"/>这句话会引用自定义类型转换器,因为这时候要把一个字符串转换成Rectangle对象,而前面<s:textfield name=” rectangle.width”/>则不会引用自定义转换器,因为它只是要把一个字符串转换成Rectange对象的width属性而已,实际上只需要转换为int。
私塾在线网站原创《研磨struts2》系列 转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4100.html】 欢迎访问http://sishuok.com获取更多内容 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1185 次