zoukankan      html  css  js  c++  java
  • 多模块Struts应用程序的几个问题(及部分解决方法)

    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实现。

  • 相关阅读:
    互联网 DBA 需要做那些事(转)
    mysql_connect和mysql_pconnect区别(转)
    Redis应用案例,查找某个值的范围(转)
    PHP 正则表达式常用函数使用小结
    PHP转换UTF-8和GB2312的URL编码(转)
    PHP 打印调用函数入口地址(堆栈)
    php CI框架nginx 配置
    apache部署多个项目
    Apache+php在windows下的安装和配置
    appium测试之获取appPackage和appActivity
  • 原文地址:https://www.cnblogs.com/bjzhanghao/p/67425.html
Copyright © 2011-2022 走看看