今天为了这个烦了一天了,终于找到了一篇文章,解决了问题
Struts从1.1版本开始支持把应用程序分为多个模块,每个模块可以看作独立的应用程序,在带来方便的同时,我也发现了一些问题。比如有一个struts应用程序分了大约十个模块,现在有以下问题不知道大家一般是怎么解决的:
1、因为要进行验证,所以在每个模块对应的资源文件里都要有“errors.required={0} is required.”等资源,有没有只用在一个文件里定义的方法?
2、用tiles的时候,要在每个模块对应的tiles-defs.xml里定义几乎相同的definition,有没有只用在一个文件里定义的方法?(我试过在缺省模块里定义一个definition,然后在模块里extends它,但不行,extends似乎只找当前模块)
3、使用ExceptionHandler的时候,为什么在exception标签里指定了bundle属性还是只在当前模块里找资源?我希望把一些重复使用的异常处理声明在一个文件里,例如NotLoginException、NoSuchObjectException等等,并且它们对应的key也指向同一个资源文件里的资源(利用bundle属性),怎么实现?
经过一段时间的摸索,第一个和第三个问题基本上解决了,其实它们可以看作同一类问题,就是资源的问题。在struts-config-xxx.xml里定义资源文件时,可以指定一个factory属性,不指定时使用缺省的“org.apache.struts.util.PropertyMessageResourcesFactory”类。我的解决方法是自定义一个CustomMessageResourcesFactory类,将多个资源文件以逗号分隔的形式作为参数(即message-resources的parameter属性)传给它,在需要资源的地方会遍历它们进行查找。同时还要自定义一个CustomMessageResources类,它的getMessage()方法里是查找资源的关键代码,而factory只是解析逗号分隔的参数构造并返回CustomMessageResources实例。
CustomMessageResourcesFactory的代码比较简单,如下所示:
package eg;
import java.util.Arrays;
import org.apache.struts.util.MessageResources;
import org.apache.struts.util.MessageResourcesFactory;
public class CustomMessageResourcesFactory extends MessageResourcesFactory{
public MessageResources createResources(String config) {
return new CustomMessageResources(Arrays.asList(config.split(",")));
}
}
CustomMessageResources就稍微复杂一些,不过很幸运,我在网上找到了一个完全符合自己要求的类,下载地址在这里,如果链接已失效请联系我。
这样,在每个模块的struts-config-xxx.xml里,只要像下面这样定义资源文件就可以实现共享资源的功能了,其中ErrorResources中是所有模块都需要的错误信息资源:
<message-resources factory="eg.CustomMessageResourcesFactory"
parameter="eg.ApplicationResources,eg.ErrorResources" />
上面参考了这篇文章http://javaboutique.internet.com/tutorials/Dynaform/index-7.html,它是通过修改ActionServlet使用CustomMessageResources的,我觉得还是自定义factory的方式更自然些。
第二个问题暂时还没有解决,也许要修改handler实现。
总结:在自定义模块中使用同一个资源文件,只需要添加上述的两个类,然后在每个自定义模块的配置文件中加以声明(当然,validator也必须分别声明)
分享到:
相关推荐
在Struts多模块配置中,每个模块代表一个独立的功能或者业务领域,它们之间通过定义良好的接口进行通信,降低了模块间的耦合度。以下是一些关键的知识点: 1. **模块化设计**:模块化是软件工程中的最佳实践,通过...
Struts2是一个非常著名的Java Web框架,用于构建可维护、可扩展且高度模块化的应用程序。在Struts2中,模块化设计是其核心特性之一,它使得开发者可以将应用程序拆分成独立的功能单元,每个单元称为一个模块。这样做...
### Struts多模块开发概述与实践 #### 一、引言 在当今的软件开发领域,多模块开发和软件扩展性已成为评估一个框架优劣的关键指标。尤其对于框架型软件而言,其是否支持多模块开发、是否具备良好的扩展性及与其他...
### Struts1多模块多配置文件的开发流程详解 #### 一、引言 在大型项目的开发过程中,为了更好地组织代码结构,提高系统的可维护性和扩展性,通常会采用多模块的设计模式。对于使用Struts1框架进行开发的项目而言,...
Struts框架的多模块设计是其一大特色,它有助于将复杂的项目拆分成多个可管理的小模块,提高代码的可维护性和可扩展性。本资料“Java进阶Struts多模块的技巧”旨在帮助开发者掌握如何有效地组织和管理Struts2框架中...
在实际开发中,多模块Struts应用还有其他一些关键点需要注意,比如: - **ActionForward**:在配置文件中,ActionForward可以指定目标模块,允许跨模块的跳转。 - **ActionForm**:每个模块可以有自己独立的表单...
以下是对Struts模块化开发的详细说明。 在Struts框架中,模块通常指的是ActionServlet配置中的 `<package>` 元素。每个`<package>`都可以看作是一个独立的处理单元,包含了特定业务逻辑的Action类、配置文件以及...
本文将详细介绍如何在Struts框架下实现多模块配置。 在Struts框架中,多模块的实现主要依赖于Action和配置文件的划分。每个模块可以视为一个独立的功能单元,拥有自己的Action类和对应的配置文件。下面我们将深入...
以下是一些关于如何在Struts中实现模块化的关键知识点: 1. **Action配置**:Action是Struts的核心组件,它负责处理HTTP请求并进行业务逻辑处理。在Struts.xml文件中,你可以为每个模块定义一个或多个Action,每个...
整个文档中的例子 博文链接:https://zhangzuanqian.iteye.com/blog/214982
在本篇文章模块中,我们将深入探讨Struts框架在处理"更多文章"功能时的关键技术和实现方式。 一、Struts框架基础 1.1 Struts概述:Struts是由Apache软件基金会维护的,它的核心是ActionServlet,负责处理HTTP请求,...
通过学习和实践这个Struts Login模块,你可以掌握Struts的基本架构、请求处理流程、数据校验、视图渲染等核心概念,为后续深入学习和使用Struts框架打下坚实的基础。同时,这个过程也会帮助你理解MVC模式在实际项目...
总的来说,整合Spring和Struts编写多页面用户注册模块涉及到的主要知识点有:Spring的DI和AOP,Struts的MVC架构,Action和Result的配置,以及JSP或模板引擎的使用。通过这样的整合,我们可以构建出一个灵活、可扩展...
### Spring与Struts的整合:实现灵活的企业级应用开发 在企业级应用开发领域,Spring框架和Struts框架都是极具影响力的技术。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,提供了良好的环境管理和...
总的来说,这个"实用Spring+Struts+Hibernate做的文件上传模块"涵盖了Web开发中的多个关键点:前端交互、后端逻辑、数据库操作和安全控制。对于初学者来说,通过学习这个项目,不仅可以掌握SSH框架的基本用法,还能...
### Struts模块化编程知识点详解 #### 一、Struts框架概述 Struts是一个基于Java Servlet/JavaServer Pages (JSP)技术的标准Web应用框架,它遵循“模型2”架构模式,采用MVC(Model-View-Controller)设计模式。在...
基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码
官方指南是学习和解决Struts2问题的重要参考,可以帮助开发者快速掌握框架的核心功能和高级特性,如Tiles插件、Struts2的AJAX支持、国际化和安全性。 5. **Struts2的拦截器(Interceptors)**: 拦截器是Struts2的...