Author: ddewolf Date: Thu Nov 9 08:23:57 2006 New Revision: 472961 URL: http://svn.apache.org/viewvc?view=rev&rev=472961 Log: Adding initContainer and destroyContainer tags
Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DestroyContainerTag.java (with props) struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitContainerTag.java (contents, props changed) - copied, changed from r472909, struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitDefinitionsTag.java struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinitcontainer.jsp (with props) Removed: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitDefinitionsTag.java Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/ContainerTagSupport.java struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/RenderTagSupport.java struts/sandbox/trunk/tiles/tiles-core/src/main/resources/META-INF/tiles-core.tld struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/access/TilesAccess.java Thu Nov 9 08:23:57 2006 @@ -48,6 +48,16 @@ public static void setContainer(Object context, TilesContainer container) throws TilesException { + + if (container == null) { + if(LOG.isInfoEnabled()) { + LOG.info("Removing TilesContext for context: " + context.getClass().getName()); + } + removeAttribute(context, CONTAINER_ATTRIBUTE); + } + if (container != null && LOG.isInfoEnabled()) { + LOG.info("Publishing TilesContext for context: " + context.getClass().getName()); + } setAttribute(context, CONTAINER_ATTRIBUTE, container); } @@ -59,16 +69,6 @@ return (TilesApplicationContext) getAttribute(context, CONTEXT_ATTRIBUTE); } - /** - * @param context - * @param - * @deprecated temporarily added for backwards compatibility. - */ - public static void setApplicationContext(Object context, TilesApplicationContext tilesContext) - throws TilesException { - setAttribute(context, CONTEXT_ATTRIBUTE, tilesContext); - } - private static Object getAttribute(Object context, String attributeName) { try { Class contextClass = context.getClass(); @@ -91,4 +91,14 @@ } } + private static void removeAttribute(Object context, String name) + throws TilesException { + try { + Class contextClass = context.getClass(); + Method attrMethod = contextClass.getMethod("removeAttribute", String.class); + attrMethod.invoke(context, name); + } catch (Exception e) { + throw new TilesException("Unable to remove attribute for specified context: '" + context + "'"); + } + } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java Thu Nov 9 08:23:57 2006 @@ -22,14 +22,16 @@ import org.apache.tiles.TilesApplicationContext; import org.apache.tiles.TilesContainer; import org.apache.tiles.TilesException; -import org.apache.tiles.util.ClassUtil; -import org.apache.tiles.preparer.BasicPreparerFactory; -import org.apache.tiles.preparer.PreparerFactory; import org.apache.tiles.context.BasicTilesContextFactory; import org.apache.tiles.context.TilesContextFactory; import org.apache.tiles.definition.DefinitionsFactory; import org.apache.tiles.definition.UrlDefinitionsFactory; import org.apache.tiles.impl.BasicTilesContainer; +import org.apache.tiles.impl.mgmt.CachingTilesContainer; +import org.apache.tiles.mgmt.MutableTilesContainer; +import org.apache.tiles.preparer.BasicPreparerFactory; +import org.apache.tiles.preparer.PreparerFactory; +import org.apache.tiles.util.ClassUtil; import java.lang.reflect.Method; import java.util.Enumeration; @@ -49,6 +51,9 @@ public static final String CONTAINER_FACTORY_INIT_PARAM = "org.apache.tiles.CONTAINER_FACTORY"; + public static final String CONTAINER_FACTORY_MUTABLE_INIT_PARAM = + "org.apache.tiles.CONTAINER_FACTORY.mutable"; + public static final String CONTEXT_FACTORY_INIT_PARAM = "org.apache.tiles.CONTEXT_FACTORY"; @@ -58,6 +63,7 @@ public static final String PREPARER_FACTORY_INIT_PARAM = "org.apache.tiles.PREPARER_FACTORY"; + private static final Map<String, String> DEFAULTS = new HashMap<String, String>(); @@ -79,7 +85,7 @@ * factories. * * @param context the executing applications context. - * Typically a ServletContext or PortletContext + * Typically a ServletContext or PortletContext * @return a tiles container * @throws TilesException if an error occurs creating the factory. */ @@ -89,10 +95,32 @@ .createFactory(context, CONTAINER_FACTORY_INIT_PARAM); } + public TilesContainer createContainer(Object context) throws TilesException { + String value = getInitParameter(context, CONTAINER_FACTORY_MUTABLE_INIT_PARAM); + if (Boolean.parseBoolean(value)) { + return createMutableTilesContainer(context); + } else { + return createTilesContainer(context); + } + } - public TilesContainer createContainer(Object context) + public TilesContainer createTilesContainer(Object context) throws TilesException { BasicTilesContainer container = new BasicTilesContainer(); + initializeContainer(context, container); + return container; + } + + public MutableTilesContainer createMutableTilesContainer(Object context) + throws TilesException { + CachingTilesContainer container = new CachingTilesContainer(); + initializeContainer(context, container); + return container; + } + + public void initializeContainer(Object context, + BasicTilesContainer container) + throws TilesException { TilesContextFactory contextFactory = (TilesContextFactory) createFactory(context, CONTEXT_FACTORY_INIT_PARAM); @@ -113,7 +141,6 @@ container.init(getInitParameterMap(context)); - return container; } @@ -128,7 +155,7 @@ method = contextClass.getMethod("getInitParameter", String.class); while (e.hasMoreElements()) { String key = (String) e.nextElement(); - initParameters.put(key, (String)method.invoke(context, key)); + initParameters.put(key, (String) method.invoke(context, key)); } } catch (Exception e) { throw new TilesException("Unable to retrieve init parameters." + @@ -147,19 +174,24 @@ public static String resolveFactoryName(Object context, String parameterName) throws TilesException { + Object factoryName = getInitParameter(context, parameterName); + return factoryName == null + ? DEFAULTS.get(parameterName) + : factoryName.toString(); + } - Object factoryName; + private static String getInitParameter(Object context, String parameterName) + throws TilesException { + Object value; try { Class contextClass = context.getClass(); Method getInitParameterMethod = contextClass.getMethod("getInitParameter", String.class); - factoryName = getInitParameterMethod.invoke(context, parameterName); + value = getInitParameterMethod.invoke(context, parameterName); } catch (Exception e) { throw new TilesException("Unrecognized context. Is this context" + "a ServletContext, PortletContext, or similar?", e); } - return factoryName == null - ? DEFAULTS.get(parameterName) - : factoryName.toString(); + return value == null ? null : value.toString(); } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/impl/BasicTilesContainer.java Thu Nov 9 08:23:57 2006 @@ -309,8 +309,7 @@ LOG.debug("Render request recieved for definition '" + definitionName + "'"); } - ComponentDefinition definition = - definitionsFactory.getDefinition(definitionName, request); + ComponentDefinition definition = getDefinition(definitionName, request); if (definition == null) { if (LOG.isWarnEnabled()) { @@ -355,6 +354,12 @@ } } + protected ComponentDefinition getDefinition(String definitionName, TilesRequestContext request) throws DefinitionsFactoryException { + ComponentDefinition definition = + definitionsFactory.getDefinition(definitionName, request); + return definition; + } + private boolean isPermitted(TilesRequestContext request, String role) { if(role == null) { return true; @@ -415,8 +420,7 @@ private boolean isValidDefinition(TilesRequestContext context, String definitionName) { try { - ComponentDefinition definition = - definitionsFactory.getDefinition(definitionName, context); + ComponentDefinition definition = getDefinition(definitionName, context); return definition != null; } catch (NoSuchDefinitionException nsde) { Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/ContainerTagSupport.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/ContainerTagSupport.java?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/ContainerTagSupport.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/ContainerTagSupport.java Thu Nov 9 08:23:57 2006 @@ -41,19 +41,14 @@ * Provides standard support for security, and provides access * to the container and component context. * </p> - * This tag takes special care to ensure that the component context is - * reset to it's original state after the execution of the tag is - * complete. This ensures that all all included attributes in subsequent - * tiles are scoped properly and do not bleed outside their intended - * scope. + * * @since Tiles 2.0 * @version $Rev$ * */ -public abstract class ContainerTagSupport extends BodyTagSupport - implements TryCatchFinally { - +public abstract class ContainerTagSupport extends BodyTagSupport { + /** * The log instance for this tag. */ @@ -63,8 +58,6 @@ protected TilesContainer container; protected ComponentContext componentContext; - private Map<String, ComponentAttribute> originalState; - public String getRole() { return role; } @@ -73,12 +66,6 @@ this.role = role; } - public int doStartTag() { - container = TilesAccess.getContainer(pageContext.getServletContext()); - componentContext = container.getComponentContext(pageContext); - cacheState(); - return isAccessAllowed() ? EVAL_BODY_BUFFERED : SKIP_BODY; - } public int doEndTag() throws JspException { if (isAccessAllowed()) { @@ -98,20 +85,12 @@ } - public void doCatch(Throwable throwable) throws Throwable { - // noop; - } - - public void doFinally() { - restoreState(); - } public void release() { super.release(); this.role = null; this.container = null; this.componentContext = null; - originalState = null; } protected abstract void execute() throws TilesException, JspException, IOException; @@ -121,21 +100,5 @@ return (role == null || req.isUserInRole(role)); } - private void cacheState() { - originalState = new HashMap<String, ComponentAttribute>(); - Iterator<String> i = componentContext.getAttributeNames(); - while(i.hasNext()) { - String name = i.next(); - ComponentAttribute original = componentContext.getAttribute(name); - ComponentAttribute a = new ComponentAttribute( - original.getValue(), original.getRole(), original.getType() - ); - originalState.put(name, a); - } - } - private void restoreState() { - originalState.clear(); - originalState.putAll(originalState); - } } Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/RenderTagSupport.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/RenderTagSupport.java?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/RenderTagSupport.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/RenderTagSupport.java Thu Nov 9 08:23:57 2006 @@ -21,28 +21,41 @@ import org.apache.tiles.ComponentAttribute; import org.apache.tiles.TilesException; +import org.apache.tiles.access.TilesAccess; import org.apache.tiles.taglib.PutTag; import org.apache.tiles.taglib.PutTagParent; import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.TryCatchFinally; import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; /** * Support for all tags which render (a template, or definition). * </p> * Properly invokes the defined preparer and invokes the abstract * render method upon completion. + * </p> + * This tag takes special care to ensure that the component context is + * reset to it's original state after the execution of the tag is + * complete. This ensures that all all included attributes in subsequent + * tiles are scoped properly and do not bleed outside their intended + * scope. * * @version $Rev$ * @since Tiles 2.0 */ public abstract class RenderTagSupport extends ContainerTagSupport - implements PutTagParent { + implements TryCatchFinally, PutTagParent { protected String preparer; protected boolean flush; protected boolean ignore; + private Map<String, ComponentAttribute> originalState; + public String getPreparer() { return preparer; } @@ -75,6 +88,21 @@ super.release(); } + public int doStartTag() { + container = TilesAccess.getContainer(pageContext.getServletContext()); + componentContext = container.getComponentContext(pageContext); + cacheState(); + return isAccessAllowed() ? EVAL_BODY_BUFFERED : SKIP_BODY; + } + + public void doCatch(Throwable throwable) throws Throwable { + // noop; + } + + public void doFinally() { + restoreState(); + } + /** * Execute the tag by invoking the preparer, if defined, and then * rendering. @@ -120,6 +148,24 @@ nestedTag.getName(), attribute ); + } + + private void cacheState() { + originalState = new HashMap<String, ComponentAttribute>(); + Iterator<String> i = componentContext.getAttributeNames(); + while(i.hasNext()) { + String name = i.next(); + ComponentAttribute original = componentContext.getAttribute(name); + ComponentAttribute a = new ComponentAttribute( + original.getValue(), original.getRole(), original.getType() + ); + originalState.put(name, a); + } + } + + private void restoreState() { + originalState.clear(); + originalState.putAll(originalState); } } Added: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DestroyContainerTag.java URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DestroyContainerTag.java?view=auto&rev=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DestroyContainerTag.java (added) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DestroyContainerTag.java Thu Nov 9 08:23:57 2006 @@ -0,0 +1,38 @@ +/* + * 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. + * + */ +package org.apache.tiles.taglib.definition; + +import org.apache.tiles.TilesException; +import org.apache.tiles.access.TilesAccess; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.TagSupport; + +public class DestroyContainerTag extends TagSupport { + + public int doEndTag() throws JspException { + try { + TilesAccess.setContainer(pageContext.getServletContext(), null); + } catch (TilesException e) { + throw new JspException(e); + } + return EVAL_PAGE; + } +} Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DestroyContainerTag.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/DestroyContainerTag.java ------------------------------------------------------------------------------ svn:keywords = Id Author Date Rev Copied: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitContainerTag.java (from r472909, struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitDefinitionsTag.java) URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitContainerTag.java?view=diff&rev=472961&p1=struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitDefinitionsTag.java&r1=472909&p2=struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitContainerTag.java&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitDefinitionsTag.java (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitContainerTag.java Thu Nov 9 08:23:57 2006 @@ -21,73 +21,229 @@ package org.apache.tiles.taglib.definition; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.tiles.TilesContainer; +import org.apache.tiles.TilesException; +import org.apache.tiles.access.TilesAccess; +import org.apache.tiles.factory.TilesContainerFactory; +import org.apache.tiles.impl.BasicTilesContainer; +import org.apache.tiles.mgmt.MutableTilesContainer; import org.apache.tiles.taglib.ComponentConstants; +import org.apache.tiles.taglib.PutTagParent; +import org.apache.tiles.taglib.PutTag; +import javax.servlet.RequestDispatcher; +import javax.servlet.Servlet; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; +import javax.servlet.jsp.tagext.BodyTagSupport; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; /** * Init definitions impl. */ -public class InitDefinitionsTag extends TagSupport implements ComponentConstants { +public class InitContainerTag extends BodyTagSupport + implements PutTagParent { + private static final Log LOG = + LogFactory.getLog(InitContainerTag.class); - /** - * Default constructor. - */ - public InitDefinitionsTag() { - super(); + private String containerFactory; + private Map<String, String> initParameters; + + + public String getContainerFactory() { + return containerFactory; } - /** - * Release all allocated resources. - */ - public void release() { + public void setContainerFactory(String containerFactory) { + this.containerFactory = containerFactory; + } - super.release(); + + public void processNestedTag(PutTag nestedTag) throws JspException { + initParameters.put(nestedTag.getName(), nestedTag.getValue().toString()); } /** - * Set file. + * Release all allocated resources. */ - public void setFile(String name) { + public void release() { + super.release(); + containerFactory = null; + initParameters = null; } - /** - * Set classname. - */ - public void setClassname(String classname) { + public int doStartTag() { + initParameters = new HashMap<String, String>(); + return EVAL_BODY_INCLUDE; } /** * TODO Add a MutableContainer so that this can be done? * Do start tag. */ - public int doStartTag() throws JspException { -// DefinitionsFactory factory = TilesUtil.getDefinitionsFactory(); -// if (factory != null) { -// return SKIP_BODY; -// } -// -// DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig(); -// factoryConfig.setFactoryClassname(classname); -// factoryConfig.setDefinitionConfigFiles(filename); -// -// try { -// factory = TilesUtil.createDefinitionsFactory(factoryConfig); -// } catch (DefinitionsFactoryException ex) { -// ex.printStackTrace(); -// throw new JspException(ex); -// } + public int doEndTag() throws JspException { + TilesContainer container = + TilesAccess.getContainer(pageContext.getServletContext()); - return SKIP_BODY; - } + if (container != null) { + LOG.warn("TilesContainer allready instantiated for this context. Ignoring request to define."); + return SKIP_BODY; + } + + RuntimeConfiguredContext context = + new RuntimeConfiguredContext(pageContext.getServletContext()); + + if (containerFactory != null) { + context.setInitParameter( + TilesContainerFactory.CONTAINER_FACTORY_INIT_PARAM, + containerFactory); + } + + for(Map.Entry<String, String> entry : initParameters.entrySet()) { + context.setInitParameter(entry.getKey(), entry.getValue()); + } + + try { + MutableTilesContainer mutableContainer = + TilesContainerFactory.getFactory(context) + .createMutableTilesContainer(context); + TilesAccess.setContainer(context, mutableContainer); + } + catch (TilesException e) { + throw new JspException("Error creating tiles container.", e); + } - /** - * Do end tag. - */ - public int doEndTag() throws JspException { return EVAL_PAGE; -} + } + + + + + @SuppressWarnings("deprecated") + public class RuntimeConfiguredContext implements ServletContext { + + private ServletContext rootContext; + private Map<String, String> initParameters; + + + public RuntimeConfiguredContext(ServletContext rootContext) { + this.rootContext = rootContext; + this.initParameters = new HashMap<String, String>(); + } + + public ServletContext getContext(String string) { + return rootContext.getContext(string); + } + + public int getMajorVersion() { + return rootContext.getMajorVersion(); + } + + public int getMinorVersion() { + return rootContext.getMinorVersion(); + } + + public String getMimeType(String string) { + return rootContext.getMimeType(string); + } + + public Set getResourcePaths(String string) { + return rootContext.getResourcePaths(string); + } + + public URL getResource(String string) throws MalformedURLException { + return rootContext.getResource(string); + } + + public InputStream getResourceAsStream(String string) { + return rootContext.getResourceAsStream(string); + } + + public RequestDispatcher getRequestDispatcher(String string) { + return rootContext.getRequestDispatcher(string); + } + + public RequestDispatcher getNamedDispatcher(String string) { + return rootContext.getNamedDispatcher(string); + } + + public Servlet getServlet(String string) throws ServletException { + return rootContext.getServlet(string); + } + + public Enumeration getServlets() { + return rootContext.getServlets(); + } + + public Enumeration getServletNames() { + return rootContext.getServletNames(); + } + + public void log(String string) { + rootContext.log(string); + } + + public void log(Exception exception, String string) { + rootContext.log(exception, string); + } + + public void log(String string, Throwable throwable) { + rootContext.log(string, throwable); + } + + public String getRealPath(String string) { + return rootContext.getRealPath(string); + } + + public String getServerInfo() { + return rootContext.getServerInfo(); + } + + public String getInitParameter(String string) { + if (initParameters.containsKey(string)) { + return initParameters.get(string); + } + return rootContext.getInitParameter(string); + } + + public void setInitParameter(String name, String value) { + initParameters.put(name, value); + } + + public Enumeration getInitParameterNames() { + return rootContext.getInitParameterNames(); + } + + public Object getAttribute(String string) { + return rootContext.getAttribute(string); + } + + public Enumeration getAttributeNames() { + return rootContext.getAttributeNames(); + } + + public void setAttribute(String string, Object object) { + rootContext.setAttribute(string, object); + } + + public void removeAttribute(String string) { + rootContext.removeAttribute(string); + } + + public String getServletContextName() { + return rootContext.getServletContextName(); + } + } } Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitContainerTag.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-core/src/main/java/org/apache/tiles/taglib/definition/InitContainerTag.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Modified: struts/sandbox/trunk/tiles/tiles-core/src/main/resources/META-INF/tiles-core.tld URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-core/src/main/resources/META-INF/tiles-core.tld?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-core/src/main/resources/META-INF/tiles-core.tld (original) +++ struts/sandbox/trunk/tiles/tiles-core/src/main/resources/META-INF/tiles-core.tld Thu Nov 9 08:23:57 2006 @@ -19,8 +19,8 @@ * under the License. */ --> -<!DOCTYPE taglib PUBLIC - "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" +<!DOCTYPE taglib PUBLIC + "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>2.0</tlib-version> @@ -715,43 +715,43 @@ </attribute> </tag> <tag> - <name>initComponentDefinitions</name> - <tag-class>org.apache.tiles.taglib.definition.InitDefinitionsTag</tag-class> - <body-content>empty</body-content> + <!-- <name>initComponentDefinitions</name> --> + <name>initContainer</name> + <tag-class>org.apache.tiles.taglib.definition.InitContainerTag</tag-class> + <body-content>JSP</body-content> <description> <![CDATA[ - <p><strong>Initialize Tile/Component definitions factory.</strong></p> + <p><strong>Initialize the TilesContainer.</strong></p> <p> - In order to use Tile/Component definitions factory, you need to initialize the factory. - This is generally done in a initializing servlet. In particular, it is done in - "ComponentActionServlet" if you use it. - If you don't initialize factory in a servlet, you can initialize it using this tag. You need - to provide the description file name, and optionally the factory classname. - Initialization is done only once, at the first call of this tag. Subsequent calls - are ignored (tag checks existence of the factory. + In order to use the Tiles system, a TilesContainer must be instantiated. + This initialization is generally done by the TilesListener (or perhaps the + TilesServlet or TilesFilter). + </p> + <p> + If the intialization needs to be dynamic, you can initialize the container using + this tag. Realize however, that this tag MUST be executed prior to invoking + any other definitions. Additionally, the initilization may only be done once, + and any subsequent invocations will be ignored. </p> ]]> </description> <attribute> - <name>file</name> - <required>true</required> - <rtexprvalue>true</rtexprvalue> - <description> - <![CDATA[ - <p>Definition file name.</p> - ]]> - </description> - </attribute> - <attribute> - <name>classname</name> + <name>containerFactory</name> <required>false</required> <rtexprvalue>true</rtexprvalue> - <description> - <![CDATA[ - <p>If specified, classname of the factory to create and initialized.</p> - ]]> - </description> + <description> <![CDATA[ <p>Container Factory implementation used to instantiate the container.</p> ]]> </description> </attribute> </tag> + + <tag> + <name>destroyContainer</name> + <tag-class>org.apache.tiles.taglib.definition.DestroyContainerTag</tag-class> + <body-content>empty</body-content> + <description> + <![CDATA[ + <p><strong>Destroy the TilesContainer.</strong></p> + ]]> + </description> + </tag> </taglib> Modified: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml (original) +++ struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/WEB-INF/web.xml Thu Nov 9 08:23:57 2006 @@ -1,25 +1,4 @@ <?xml version="1.0" encoding="ISO-8859-1"?> -<!-- -/* - * 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. - * - */ ---> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" @@ -31,6 +10,11 @@ <context-param> <param-name>org.apache.tiles.CONTEXT_FACTORY</param-name> <param-value>org.apache.tiles.context.enhanced.EnhancedContextFactory</param-value> + </context-param> + + <context-param> + <param-name>org.apache.tiles.CONTAINER_FACTORY.mutable</param-name> + <param-value>true</param-value> </context-param> <!-- Standard Action Servlet Configuration --> Modified: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp?view=diff&rev=472961&r1=472960&r2=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp (original) +++ struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/index.jsp Thu Nov 9 08:23:57 2006 @@ -41,6 +41,9 @@ <a href="testimportattribute.jsp">Test importAttribute Tag</a><br/> <a href="testimportattribute_all.jsp">Test importAttribute Tag with no name</a><br/> + <h2>Container Management Tags</h2> + <a href="testinitcontainer.jsp">Test Initialize Container</a><br/> + <h2>Currently not working tests</h2> <a href="testdef.jsp">Test Definition Tag</a><br/> <!-- Currently all the tests work.--> Added: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinitcontainer.jsp URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinitcontainer.jsp?view=auto&rev=472961 ============================================================================== --- struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinitcontainer.jsp (added) +++ struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinitcontainer.jsp Thu Nov 9 08:23:57 2006 @@ -0,0 +1,12 @@ +<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %> + +<tiles:destroyContainer/> +<tiles:initContainer containerFactory="org.apache.tiles.factory.TilesContainerFactory"> + <tiles:put name="definitions-config" value="/WEB-INF/tiles-defs.xml,/org/apache/tiles/classpath-defs.xml"/> + <tiles:put name="org.apache.tiles.CONTEXT_FACTORY" + value="org.apache.tiles.context.enhanced.EnhancedContextFactory"/> + <tiles:put name="org.apache.tiles.CONTAINER_FACTORY.mutable" + value="true"/> +</tiles:initContainer> + +<tiles:insertDefinition name="test.definition" /> Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinitcontainer.jsp ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/sandbox/trunk/tiles/tiles-test/src/main/webapp/testinitcontainer.jsp ------------------------------------------------------------------------------ svn:keywords = Id Author Date Rev