Struts2自定义类型转换器实践

需积分: 3 2 下载量 14 浏览量 更新于2024-08-18 收藏 152KB PPT 举报
"这篇资源主要介绍了如何在Struts2框架中实现自定义类型转换器,以及Struts2开发所需的依赖库和启动配置。" 在Struts2框架中,当需要处理非基本数据类型如枚举时,系统默认的类型转换器可能无法满足需求,这时就需要我们自定义类型转换器。在提供的描述中,`HelloWorldAction` 类包含一个 `Gender` 枚举类型的属性。当请求参数需要注入到 `gender` 属性时,因为Struts2默认不支持枚举类型转换,所以我们必须定义一个转换器来处理这种类型。 自定义类型转换器在Struts2中是通过实现 `org.apache.struts2.converters.Converter` 接口或继承 `org.apache.struts2.util.StrutsTypeConverter` 类来完成的。转换器的主要任务是将请求参数的字符串值转换为目标类型。在这个例子中,我们需要创建一个转换器类来将请求中的 "MAN" 或 "WOMEN" 字符串转换为 `Gender` 枚举值。 ```java public class GenderConverter extends StrutsTypeConverter { @Override public Object convertFromString(Map context, String[] values, Class toClass) { if (values != null && values.length > 0 && values[0] != null) { return Gender.valueOf(values[0].toUpperCase()); } return null; } @Override public String convertToString(Map context, Object o) { if (o instanceof Gender) { return ((Gender) o).name().toLowerCase(); } return ""; } } ``` 然后,我们需要在Struts2的配置文件中注册这个转换器,通常是通过 `struts.xml` 或者 `struts.properties` 文件,如下所示: ```xml <package name="default" namespace="/" extends="struts-default"> <global-results/> <global-exception-mappings/> <interceptors> <!-- ... --> </interceptors> <actions> <!-- ... --> </actions> <converters> <converter name="gender" class="com.example.GenderConverter"/> </converters> </package> ``` 这样,Struts2在处理 `HelloWorldAction` 的 `gender` 属性时,就会使用我们自定义的 `GenderConverter` 进行类型转换。 此外,资源中提到了开发Struts2应用程序所需的一些核心库。包括但不限于: 1. `struts2-core-2.x.x.jar`: Struts2框架的核心库,包含了框架的基本功能和组件。 2. `xwork-2.x.x.jar`: XWork库,作为Struts2的基础,提供了许多底层服务和机制。 3. `ognl-2.6.x.jar`: 对象图导航语言,Struts2用于表达式语言,用于数据绑定和方法调用。 4. `freemarker-2.3.x.jar`: FreeMarker模板引擎,用于生成动态HTML或其他文本格式的输出。 5. `commons-logging-1.1.x.jar`: 通用的日志接口,允许Struts2与其他日志框架(如Log4J)进行交互。 6. `Commons-fileupload`: 用于处理文件上传的库。 7. 如果需要与其他框架集成,例如Spring,还需要相应的插件jar,如 `struts2-spring-plugin-2.x.x.jar`。 Struts2的启动配置通常在 `web.xml` 文件中通过过滤器完成。以下是基本的Struts2过滤器配置: ```xml <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 这个配置会将所有请求都通过Struts2的 `FilterDispatcher` 过滤器处理,从而启动Struts2框架。在较新的Struts2版本中,推荐使用 `StrutsPrepareAndExecuteFilter` 替代 `FilterDispatcher`。 这个资源涵盖了Struts2自定义类型转换器的创建、Struts2核心依赖库的介绍以及基本的框架启动配置,对于理解和开发Struts2应用程序非常有帮助。