文档介绍:第7章 Struts2的高级应用
本章将讲述一些Struts2的高级应用,有一些是struts2提供的特殊功能,大部分是由struts2提供的基本功能组合而来。这些方法与设计模式的思路类型,“面对同样的问题采用经典的、可靠的、易用的方法来解决”。还有一些问题是Web开发中经常遇到的,比如类型转换,此类问题工作量巨大。Struts2也提供了完美的解决方案,使开发者从这些重复劳动中解放出来。
类型转换(Type Conversion)
在所有的基于Web的Java开发框架中,Struts2拥有最优秀的类型转换能力。通常情况下,要利用这种能力,只需要把HTML输入项(表单元素和其他GET/POST的参数)命名为合法的OGNL表达式。
为什么需要类型转换
在Web世界中输入输出是没有数据类型的概念的,任何数据都被当作字符串或字符串数组来传递。如果需要转化为其他类型如int进行计算就要使用Java的转换函数,在本书关于EL章节中已经介绍过,EL提供了某些转换功能,如String对基本类型的数据的转化。但这样是还是不够的,当需要将一个字符串转换成为一个更为复杂的对象时,,如果提示用户使用字符串格式("3,22")输入一个坐标,需要让Struts2完成String到Point和Point到String的转换,Struts2正是提供这样的功能。下面介绍如何配置和使用Struts2提供的类型转化。
定义类型转换器
,.。该类可以让很方便的编写处理对象和字符串相互转换的类型转换器,如代码所示。
内建的(Built in)类型转换支持
Struts2可以自动完成大多数常用的类型转换。这也是为什么在struts2中字符串对基本类型如int的转化是自动完成的,无需任何配置和代码。已支持的与字符串之间转换类型包括:
Struts2可以自动完成大多数常用的类型转换。这也是为什么在struts2中字符串对基本类型如int的转化是自动完成的,无需任何配置和代码。已支持的与字符串之间转换类型包括:
String
boolean/Boolean
char/Character
int/Integer、float/Float、long/Long、double/Double。
dates:使用当前request指定的Locale信息对应的SHORT格式。
arrays:假定每一个字符串都能够转换成对应的数组元素。
collections:如果不能确定对象类型, 将假定集合元素类型为String, 并创建一个新的ArrayList。
参数名称的关系
利用Struts2的类型转换最好的方式是直接装配对象(理想情况下应当直接使用业务对象(domain objects),而不是使用基本类型或字符串类型的表单参数值作为中间值,然后在Action的execute()方法中把这些中间值组装成完整的对象下面是一些提示:
plex)OGNL表达式。Struts2能自动创建实际对象。
使用JavaBeans。Struts2只能创建遵守JavaBean规范的对象,这需要对象提供一个无参构造函数,并包含适当的getter和setter方法。
().setName(),但如果希望Struts2创建Person对象,那么必须包含一个setPerson()方法。
对于list和map对象,使用索引符号,如people[0].name or friends['patrick'].name。通常这些HTML表单元素是在一个循环中绘制出来的, 因此可以在JSP Tags中使用iterator标签的状态属性(status attribute)或在FreeMarker Tags中使用${foo_index} 来指定这一属性。
对于多选的列表, 显然不能为每个单独的选项使用对应的属性符号来命名(由于)。替代的方法是,使用简单的名称 来命名表单元素,Struts2知道需要为每一个选中的选项创建一个新的Person对象并设定它的名字。
空值属性处理
Struts2还有一些非常有用的类型转换特性。对空值(Null)属性的处理可以在发现空值引用时自动创建对象。对Collection和Map的支持提供了针对Java集合的智能空值处理和类型转换。类型转换错误处理提供了一种简单的方法可以把输入校验问题和输入类型转换问题区别开。
通过把action context中的键值 CREATE_NULL_O