多模块Struts应用程序的几个问题(及部分解决方法)

简介: Struts从1.1版本开始支持把应用程序分为多个模块,每个模块可以看作独立的应用程序,在带来方便的同时,我也发现了一些问题。比如有一个struts应用程序分了大约十个模块,现在有以下问题不知道大家一般是怎么解决的: 1、因为要进行验证,所以在每个模块对应的资源文件里都要有“errors.

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的代码比较简单,如下所示:

None.gif package eg;
None.gif
None.gifimport java.util.Arrays;
None.gif
None.gifimport org.apache.struts.util.MessageResources;
None.gifimport org.apache.struts.util.MessageResourcesFactory;
None.gif
None.gifpublic class CustomMessageResourcesFactory extends MessageResourcesFactory{
None.gif
None.gif    public MessageResources createResources(String config) {
None.gif        
None.gif        
return   new  CustomMessageResources(Arrays.asList(config.split( " , " )));
None.gif    }
None.gif
None.gif}
None.gif

CustomMessageResources就稍微复杂一些,不过很幸运,我在网上找到了一个完全符合自己要求的类,下载地址在这里,如果链接已失效请联系我。

这样,在每个模块的struts-config-xxx.xml里,只要像下面这样定义资源文件就可以实现共享资源的功能了,其中ErrorResources中是所有模块都需要的错误信息资源:

None.gif < message-resources  factory ="eg.CustomMessageResourcesFactory"  
None.gif    parameter
="eg.ApplicationResources,eg.ErrorResources"   />
None.gif

上面参考了这篇文章http://javaboutique.internet.com/tutorials/Dynaform/index-7.html,它是通过修改ActionServlet使用CustomMessageResources的,我觉得还是自定义factory的方式更自然些。

第二个问题暂时还没有解决,也许要修改handler实现。

本文转自博客园八进制的博客,原文链接:多模块Struts应用程序的几个问题(及部分解决方法),如需转载请自行联系原博主。

相关文章
|
SQL XML Java
Web阶段:第十四章:JSTL标签库
Web阶段:第十四章:JSTL标签库
Web阶段:第十四章:JSTL标签库
|
Java Maven
maven创建web项目的两种方式【骨架创建webPK转换web】(上)
maven创建web项目的两种方式【骨架创建webPK转换web】
150 0
maven创建web项目的两种方式【骨架创建webPK转换web】(上)
|
Java Maven
maven创建web项目的两种方式【骨架创建webPK转换web】(下)
maven创建web项目的两种方式【骨架创建webPK转换web】
163 0
maven创建web项目的两种方式【骨架创建webPK转换web】(下)
|
Java 网络架构 Spring
使用cxf3.0.4搭建webservice服务需要的最精简jar包
使用cxf3.0.4搭建webservice服务需要的最精简jar包
355 0
|
JSON Java 测试技术
Springboot 系列(七)web 开发之异常错误处理机制剖析
Springboot 系列(七)web 开发之异常错误处理机制剖析
597 0
Springboot 系列(七)web 开发之异常错误处理机制剖析
|
XML Java Apache
配置struts-2.5.16必需jar包Struts2的特性变动
1、jar包的变动 必需jar包,旧版本:    必需jar包,新版本:    在struts-2.5.16版本的lib目录下没有xwork-core的jar包,原因是被合并到struts-core这个jar里了。
2037 0
|
JavaScript 前端开发 容器
走进webpack(2)--第三方框架(类库)的引入及抽离
  正文之前,由于这是一个系列的文章,可能第一次看到的看官老爷们会觉得突兀,如果你是webpack新手,我建议你先从前几篇文章看起,如果你对webpack有一些了解,也希望可以在github上下载代码,对照着看会更有效果   在当代的前端开发中,很少会用原生JS来开发页面,最基本的都会使用jQuery来节省我们开发的时间和效率,而angular,vue,react的出现更是为前端开发者带来了福音。
1728 0
|
安全 Java 应用服务中间件