diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java index b96884cb6..871ccf3e0 100644 --- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java +++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesContainerFactory.java @@ -63,6 +63,8 @@ import org.apache.tiles.renderer.impl.ChainedDelegateAttributeRenderer; import org.apache.tiles.servlet.context.ServletUtil; import org.apache.tiles.util.URLUtil; +import com.opensymphony.xwork2.util.TextParseUtil; + import javax.el.ArrayELResolver; import javax.el.BeanELResolver; import javax.el.CompositeELResolver; @@ -73,6 +75,7 @@ import javax.el.ResourceBundleELResolver; import javax.servlet.ServletContext; import java.io.IOException; import java.net.URL; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -201,7 +204,12 @@ public class StrutsTilesContainerFactory extends BasicTilesContainerFactory { @Override protected List getSourceURLs(TilesApplicationContext applicationContext, TilesRequestContextFactory contextFactory) { try { - Set finalSet = applicationContext.getResources(getTilesDefinitionPattern(applicationContext.getInitParams())); + Set finalSet = new HashSet(); + + Set definitions = getTilesDefinitions(applicationContext.getInitParams()); + for (String definition : definitions) { + finalSet.addAll(applicationContext.getResources(definition)); + } return URLUtil.getBaseTilesDefinitionURLs(finalSet); } catch (IOException e) { @@ -209,11 +217,11 @@ public class StrutsTilesContainerFactory extends BasicTilesContainerFactory { } } - protected String getTilesDefinitionPattern(Map params) { + protected Set getTilesDefinitions(Map params) { if (params.containsKey(DefinitionsFactory.DEFINITIONS_CONFIG)) { - return params.get(DefinitionsFactory.DEFINITIONS_CONFIG); + return TextParseUtil.commaDelimitedStringToSet(params.get(DefinitionsFactory.DEFINITIONS_CONFIG)); } - return TILES_DEFAULT_PATTERN; + return TextParseUtil.commaDelimitedStringToSet(TILES_DEFAULT_PATTERN); } protected ELAttributeEvaluator createELEvaluator(TilesApplicationContext applicationContext) { diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesInitializer.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesInitializer.java index 550c6b18d..c66710477 100644 --- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesInitializer.java +++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesInitializer.java @@ -22,7 +22,9 @@ package org.apache.struts2.tiles; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; import org.apache.tiles.TilesApplicationContext; +import org.apache.tiles.definition.DefinitionsFactory; import org.apache.tiles.factory.AbstractTilesContainerFactory; +import org.apache.tiles.servlet.context.ServletTilesApplicationContext; import org.apache.tiles.startup.AbstractTilesInitializer; import javax.servlet.ServletContext; @@ -33,8 +35,15 @@ public class StrutsTilesInitializer extends AbstractTilesInitializer { @Override protected TilesApplicationContext createTilesApplicationContext(TilesApplicationContext preliminaryContext) { - LOG.debug("Initializing Tiles wildcard support ..."); - return new StrutsWildcardServletTilesApplicationContext((ServletContext) preliminaryContext.getContext()); + ServletContext servletContext = (ServletContext) preliminaryContext.getContext(); + + if (servletContext.getInitParameter(DefinitionsFactory.DEFINITIONS_CONFIG) != null) { + LOG.trace("Found definitions config in web.xml, using standard Servlet support ...."); + return new ServletTilesApplicationContext(servletContext); + } else { + LOG.trace("Initializing Tiles wildcard support ..."); + return new StrutsWildcardServletTilesApplicationContext(servletContext); + } } @Override diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsWildcardServletTilesApplicationContext.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsWildcardServletTilesApplicationContext.java index f01b45afb..d2dca7056 100644 --- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsWildcardServletTilesApplicationContext.java +++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsWildcardServletTilesApplicationContext.java @@ -50,8 +50,12 @@ public class StrutsWildcardServletTilesApplicationContext extends ServletTilesAp for (Object path : context.getResourcePaths("/")) { try { - URL url = new File(context.getRealPath(String.valueOf(path))).toURI().toURL(); - urls.add(url); + String realPath = context.getRealPath(String.valueOf(path)); + + if (realPath != null) { + URL url = new File(realPath).toURI().toURL(); + urls.add(url); + } } catch (MalformedURLException e) { throw new ConfigurationException(e); }