blob: 07555f7e5a178de03d0c19e6f8c7267c93638aec [file] [log] [blame]
~~ $Id$
~~
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
~~
-----------
Load XML definition files using wildcards
-----------
Load XML definition files using wildcards
XML definition files can be loaded using wildcard, but this behaviour is not
the default, due to compatibility reasons to Tiles 2.0.x.
* Prerequisites
To use wildcards in XML definition files, you need to put the following libraries
in your classpath:
* spring-core.jar
* spring-web.jar
* spring-context.jar
* spring-beans.jar
* aopalliance.jar
If you are using Maven, simply depend on <<<spring-web>>> package.
* Configuration
To be able to specify Tiles XML definition files using wildcards, there is the
need to override the Tiles application context creation. For example, if you
are using parameter-based initialization, provide a new value for the
{{{../config-reference.html#org.apache.tiles.context.AbstractTilesApplicationContextFactory}<<<org.apache.tiles.context.AbstractTilesApplicationContextFactory>>>}}
init parameter. For example:
----------------------------------------
<init-param>
<param-name>org.apache.tiles.context.AbstractTilesApplicationContextFactory</param-name>
<param-value>
org.apache.tiles.servlet.context.wildcard.WildcardServletTilesApplicationContextFactory
</param-value>
</init-param>
----------------------------------------
* Usage
To load XML definition files using wilcards you can proceed, as usual, in two
ways:
* If you are using parameter-based initialization, provide a new value for the
{{{../config-reference.html#org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG}<<<org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG>>>}}
init parameter. The files that have an underscore (_) in their name will be
skipped. You can specify, for example:
----------------------------------------
<init-param>
<param-name>org.apache.tiles.definition.DefinitionsFactory.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles-defs*.xml,
classpath:/org/apache/**/tiles-defs.xml</param-value>
</init-param>
----------------------------------------
* If you are using Java-based configuration, override the
{{{../apidocs/org/apache/tiles/factory/BasicTilesContainerFactory.html#getSourceURLs(java.lang.Object,%20org.apache.tiles.TilesApplicationContext,%20org.apache.tiles.context.TilesApplicationContextFactory)}getSourceURLs}}
of <<<BasicTilesContainerFactory>>>. In the following example, notice the
manual exclusion of files including underscores (_):
----------------------------------------
/** {@inheritDoc} */
@Override
protected List<URL> getSourceURLs(Object context,
TilesApplicationContext applicationContext,
TilesRequestContextFactory contextFactory) {
List<URL> urls = new ArrayList<URL>(URL_COUNT);
try {
Set<URL> urlSet = applicationContext
.getResources("/WEB-INF/tiles-defs*.xml");
for (URL url : urlSet) {
String externalForm = url.toExternalForm();
if (externalForm.indexOf('_', externalForm.lastIndexOf("/")) < 0) {
urls.add(url);
}
}
urls.add(applicationContext.getResource(
"classpath:/org/apache/tiles/classpath-defs.xml"));
} catch (IOException e) {
throw new DefinitionsFactoryException(
"Cannot load definition URLs", e);
}
return urls;
}
----------------------------------------
* Syntax
Wildcard support uses Spring Framework syntax for loading files. For example:
* one asterisk (*) for a single placeholder;
* two asterisks (**) to say "in every directory under the specified one";
* the <<<classpath:>>> prefix loads files from the classpath.
* etc.
For everything else, see Spring's documentation.