Definir los ficheros de localización fuera del classpath
Artículo por Club Developers · 21 julio 2006
3071 vistas
Para poder usar un ResourceBundle definido fuera del classpath, tendremos que declarar un módulo de carga de recursos asÃ:
Nota: esta clase es una versión mejorada de la propuesta en la FAQ [iurl=90&all=0&fs=1196#1200]Cargar varios ficheros de recursos (bundles) sin necesidad de usar las llaves de los bundles[/iurl].
Ejemplo de configuración en el fichero struts-config.xml:
Nota: esta clase es una versión mejorada de la propuesta en la FAQ [iurl=90&all=0&fs=1196#1200]Cargar varios ficheros de recursos (bundles) sin necesidad de usar las llaves de los bundles[/iurl].
- Soporte de ficheros de recursos múltiples
- Acepta los recursos en el classpath
- Acepta los recursos de tipo url
java
package com.vvic.struts.utils; import java.io.InputStream; import java.net.URL; import java.util.Enumeration; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.util.MessageResourcesFactory; import org.apache.struts.util.PropertyMessageResources; public class MultiPropertyMessageResources extends PropertyMessageResources { protected static final Log log; public MultiPropertyMessageResources(MessageResourcesFactory factory, super(factory, config); log.info("Initializing, config='" + config + "'"); } public MultiPropertyMessageResources(MessageResourcesFactory factory, super(factory, config, returnNull); log.info("Initializing, config='" + config + "', returnNull=" + returnNull); } label0: { if (log.isTraceEnabled()) log.trace("loadLocale(" + localeKey + ")"); synchronized (locales) { if (locales.get(localeKey) == null) break label0; } return; } locales.put(localeKey, localeKey); for (int i = 0; i < configFiles.length; i++) { if (localeKey.length() > 0) name = name + "_" + localeKey; name = name + ".properties"; try { if (log.isTraceEnabled()) log.trace("Â Loading resource '" + name + "'"); .getContextClassLoader(); if (classLoader == null) classLoader = getClass().getClassLoader(); is = classLoader.getResourceAsStream(name); if (is != null) { props.load(is); is.close(); } if (log.isTraceEnabled()) log.trace("Â Loading resource completed"); log.error("loadLocale()", t); if (is != null) try { is.close(); } } if (props.size() < 1) { try { props.load(is); is.close(); log.error("loadLocale()", t); } } if (props.size() < 1) { log.warn("Unable to load resource " + name); return; } synchronized (messages) { String key; .put(messageKey(localeKey, key), props.getProperty(key))) { if (log.isTraceEnabled()) log.trace("Â Saving message key '" + messageKey(localeKey, key)); } } } return; } static { log = LogFactory.getLog(MultiPropertyMessageResources.class); } }
Ejemplo de configuración en el fichero struts-config.xml:
xml
<message-resources parameter="resources.application,file:///workspace/globalResources/erreurs" factory="com.vvic.struts.utils.MultiPropertyMessageResourcesFactory" />