struts的奇怪异常及其解决方案---missing resource 'received' in key method map

在使用struts时,由于继承了LookupDispatchAction,所以为其写了资源文件
出现了下面的异常:
missing resource 'received' in key method map javax.servlet.ServletException: Action[/messageAction] missing
resource 'received' in key method map
      
检查了类、资源文件、配置文件、路径,等等等等,都是对的,于是猜测各种情况,不断郁闷+重启后,异常依旧,已经过去了一个上午,心急如焚,于是决定,重新打包部署,把不用的配置删掉,采用排除法来确定异常所在,最后把目光锁定在struts-config.xml上,因为涉及到资源文件配置的就是这个文件了,在这个文件中,只留下对我有用的一组配置(Form+Action+Resource)后,打包、部署到Websphere中,嘿嘿,成功了!于是又恢复该配置文件到最初,留下一个资源文件配置(All Forms+AllActions+...+onlyResource-->“<message-resources parameter="com.ztesoft.ds.application.web.message.resource.Resources" />”),其余删掉,重启后成功,于是再把Resource全部恢复,再一个一个删掉,删掉一个,重启一次,(总之排列组合,幸亏配置不多......此处删去n字),最后,终于确定到以下两个资源文件上了
<message-resources parameter="com.ztesoft.ds.application.web.bulletin.resource.BulletinResource" />
<message-resources parameter="com.ztesoft.ds.application.web.discuss.resource.DiscussResource" /> 
我发现,将这两个资源文件删去,异常消除,加上任意一个,异常重现,我很纳闷,因为就算key有冲突,那也不可能在名字不一样的两个文件中冲突,而只可能在同一文件中冲突,就算可以在两个文件中冲突,那discuss.resource.DiscussResource文件中也没有和上述两文件冲突的key啊(我一行行看过了)。奇怪!
       
到了这一步,更让人为难了,为了使一个资源文件有用而删去另两个资源文件的配置,根本行不通啊,于是和MikeWang讨论,他提出将资源文件的位置换一换再看,结果message好了,却发现同样是继承LookupDispatchdiscuss出现了问题,和刚才的异常完全一样,蒙了!看struts的源代码,知道了struts在对照键值对之前会先读入所有的资源文件

private Map initLookupMap(HttpServletRequest request, Locale userLocale) {

        Map lookupMap = new HashMap();

        this.keyMethodMap = this.getKeyMethodMap();

 

        ModuleConfig moduleConfig =

                (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);

 

        MessageResourcesConfig[] mrc = moduleConfig.findMessageResourcesConfigs();

 

        // Look through all module's MessageResources

        for (int i = 0; i < mrc.length; i++) {

            MessageResources resources = this.getResources(request, mrc[i].getKey());

 

            // Look for key in MessageResources

            Iterator iter = this.keyMethodMap.keySet().iterator();

            while (iter.hasNext()) {

                String key = (String) iter.next();

                String text = resources.getMessage(userLocale, key);

 

                // Found key and haven't added to Map yet, so add the text

                if ((text != null) && !lookupMap.containsKey(text)) {

                    lookupMap.put(text, key);

                }

            }

        }

 

        return lookupMap;

    }

这个好象并不能解决这个问题,但是让我想到了另一个解决方案:将资源文件整合!以前是每个模块一个资源文件,现在将资源文件的内容全部放在一起。

接下来就是搜索,修改每个绑定资源的页面,struts-config.xml文件,完成后,重启服务,成功!看一下时间----1621---靠,这一天光搞了个这~

由此可知:继承LookupDispatchAction服务,不能每个模块都去配置自己的资源文件,因为资源文件之间会有冲突,只能将资源放入一个文件,不知道是不是strutsbug,搞死了!

记之!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值