组合设计模式,解决struts只能有一个资源文件的问题

   如果在不指定key的情况下,一个struts-config.xml文件内,只能配置一个资源文件.但实际做项目时,通常会希望每个模块都有自己的资源文件. 解决这个问题最简单也是最保险的办法: 使用组合模式,具体看代码.

 

之前的配置;
< message-resources  parameter ="blog.csdn.net.huangbin.ApplicationResources" />

 

之后的配置
  
< message - resources 
     factory
= " blog.csdn.net.huangbin.MutilMessageResourcesFactory "
     parameter
= "
     blog.csdn.net.huangbin.ApplicationResources
     blog.csdn.net.huangbin.User
     blog.csdn.net.huangbin.Role
     blog.csdn.net.huangbin.Org
     
"
      />

blog.csdn.net.huangbin.MutilMessageResourcesFactory 是自定义资源工厂.

blog.csdn.net.huangbin.MutilMessageResources 是自定义的资源类.-->使用了组合模式

具体代码如下:

MutilMessageResourcesFactory 

package  blog.csdn.net.huangbin;
import  java.util.ArrayList;
import  java.util.List;
import  java.util.StringTokenizer;

import  org.apache.struts.util.MessageResources;
import  org.apache.struts.util.PropertyMessageResources;
import  org.apache.struts.util.PropertyMessageResourcesFactory;

public   class  MutilMessageResourcesFactory  extends  PropertyMessageResourcesFactory {

    
private static final long serialVersionUID = 1L;

    
public MessageResources createResources(String config) {
        MutilMessageResources mutilMessage 
= new MutilMessageResources(this, config, this.returnNull);
        String[] configs 
= getConfigs(config);
        
for(int i=0; i<configs.length; i++){
            MessageResources message 
= new PropertyMessageResources(this, configs[i], this.returnNull);
            mutilMessage.addMessageResources(message);
        }

        
return mutilMessage;
    }

    
    
private String[] getConfigs(String pConfig){
        
if ( pConfig == null ){
            
return new String[0];
        }

        
        StringTokenizer st 
= new StringTokenizer(pConfig, ", ; ");
        List result 
= new ArrayList();
        
while( st.hasMoreTokens() ){
            result.add(st.nextToken());
        }

        
return (String[])result.toArray(new String[0]);
        
    }


}

MutilMessageResources

 

package  blog.csdn.net.huangbin;

import  java.util.ArrayList;
import  java.util.Iterator;
import  java.util.List;
import  java.util.Locale;

import  org.apache.struts.util.MessageResources;
import  org.apache.struts.util.MessageResourcesFactory;
import  org.apache.struts.util.PropertyMessageResources;

public   class  MutilMessageResources  extends  PropertyMessageResources {

    
private static final long serialVersionUID = 1L;
    
private List messageResources = new ArrayList();
    
    
public void addMessageResources(MessageResources pMessageResources){
        messageResources.add(pMessageResources);
    }

    
    
public MutilMessageResources(MessageResourcesFactory factory, String config) {
        
this(factory, config, false);
    }

    
public MutilMessageResources(
        MessageResourcesFactory factory,
        String config,
        
boolean returnNull) {
        
super(factory, config, returnNull);
    }



    
public String getMessage(Locale locale, String key) {
        String result 
= null;
            
for(int i=messageResources.size()-1; i>=0; i--){
            MessageResources message 
= (MessageResources)messageResources.get(i);
            result 
= message.getMessage(locale, key);
            
if ( result == null ){
                
continue;//没找到,继续找.
            }
else{
                
break;//找到了,跳出来.
            }

        }

        
return result;
    }


}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值