如果在不指定key的情况下,一个struts-config.xml文件内,只能配置一个资源文件.但实际做项目时,通常会希望每个模块都有自己的资源文件. 解决这个问题最简单也是最保险的办法: 使用组合模式,具体看代码.
之前的配置;
< message-resources parameter ="blog.csdn.net.huangbin.ApplicationResources" />
< 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
"
/>
< 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]);
}
}
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]);
}
}
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;
}
}
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;
}
}