今天为了这个烦了一天了,终于找到了一篇文章,解决了问题
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多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块开发,struts多模块...
struts多模块配制 任何一个公司只要有struts框架struts多模块是必不可少的
struts1多模块多配置文件的开发流畅图解
Struts多模块[定义].pdf
NULL 博文链接:https://cdxs2.iteye.com/blog/1926331
Java进阶Struts多模块的技巧.rar
struts多模块相关配置的介绍
struts的模块话开发的技术事例
整个文档中的例子 博文链接:https://zhangzuanqian.iteye.com/blog/214982
Struts课程模块测试.doc
struts登陆上传模块struts登陆上传模块struts登陆上传模块
更多文章模块更多文章模块更多文章模块更多文章模块更多文章模块更多文章模块更多文章模块更多文章模块
使用Spring整合Struts编写多页面用户注册模块 使用Spring整合Struts编写多页面用户注册模块
基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码 基于struts的登陆模块源码
Spring 整合 Struts,很强大
Struts模块化编程教程 .doc1、前言 STRUTS是标准的"模型2"的WEB应用框架,其中的ActionServlet代表了"模型2"MVC设计模式中的"控制器" 。STRUTS应用程序一般使用JSP代码生成用户界面,这些代码不包括任何商业逻辑,...
Struts模块化编程教程
使用Spring+Struts+Hibernate技术做的简单,实用的文件上传模块,适合初学者。