You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2009/04/30 00:07:36 UTC

svn commit: r769961 [1/2] - in /tiles/framework/trunk: tiles-api/src/main/java/org/apache/tiles/ tiles-core/src/main/java/org/apache/tiles/context/ tiles-core/src/main/java/org/apache/tiles/renderer/impl/ tiles-core/src/test/java/org/apache/tiles/defin...

Author: apetrelli
Date: Wed Apr 29 22:07:34 2009
New Revision: 769961

URL: http://svn.apache.org/viewvc?rev=769961&view=rev
Log:
TILES-400
FreeMarker attribute renderer created

TILES-408
A Velocity-styled tool has been created.

TILES-406
initContainer deprecated and test removed.

TILES-398
Velocity attribute renderer created.

TILES-403
Now TilesRequestContext can set content type and write response headers.

TILES-405
templateExpression and templateType now supported.

Removed:
    tiles/framework/trunk/tiles-test/src/main/webapp/testinitcontainer.jsp
    tiles/framework/trunk/tiles-test/src/test/selenium/InitContainerTest.html
    tiles/framework/trunk/tiles-velocity/src/main/java/org/apache/tiles/velocity/context/ExternalWriterHttpServletResponse.java
    tiles/framework/trunk/tiles-velocity/src/test/java/org/apache/tiles/velocity/context/ExternalWriterHttpServletResponseTest.java
Modified:
    tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContext.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java
    tiles/framework/trunk/tiles-freemarker/pom.xml
    tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java
    tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java
    tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java
    tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertTemplateFMModelTest.java
    tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java
    tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java
    tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
    tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld
    tiles/framework/trunk/tiles-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
    tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletHeaderMap.java
    tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java
    tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java
    tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java
    tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertTemplateModel.java
    tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertDefinitionModelTest.java
    tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertTemplateModelTest.java
    tiles/framework/trunk/tiles-test/pom.xml
    tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java
    tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/freemarker/tiles-defs.xml
    tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/velocity/tiles-defs.xml
    tiles/framework/trunk/tiles-test/src/main/webapp/index.jsp
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/layout_closebody.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testdef.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testdef_extend.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testdef_preparer.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertdefinition_composite_tags.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertdefinition_composite_tags_includes_configured.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertdefinition_composite_tags_includes_configured_notype.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertdefinition_composite_tags_notype.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertdefinition_override.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertdefinition_override_and_not.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertnesteddefinition_tags.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testinsertnestedlistdefinition_tags.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_cascaded.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_cascaded_overridden.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_cascaded_template.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_el.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_el_singleeval.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_flush.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_reversed.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_reversed_explicit.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testput_servlet.vm
    tiles/framework/trunk/tiles-test/src/main/webapp/velocity/testputlist_cascaded.vm
    tiles/framework/trunk/tiles-test/src/test/selenium/TestSuite.html
    tiles/framework/trunk/tiles-velocity/pom.xml
    tiles/framework/trunk/tiles-velocity/src/main/java/org/apache/tiles/velocity/context/VelocityTilesRequestContext.java
    tiles/framework/trunk/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertDefinitionVModel.java
    tiles/framework/trunk/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/InsertTemplateVModel.java
    tiles/framework/trunk/tiles-velocity/src/main/java/org/apache/tiles/velocity/template/Tiles2Tool.java
    tiles/framework/trunk/tiles-velocity/src/main/resources/tools.xml
    tiles/framework/trunk/tiles-velocity/src/test/java/org/apache/tiles/velocity/context/VelocityTilesRequestContextTest.java
    tiles/framework/trunk/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertDefinitionVModelTest.java
    tiles/framework/trunk/tiles-velocity/src/test/java/org/apache/tiles/velocity/template/InsertTemplateVModelTest.java

Modified: tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java (original)
+++ tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/Attribute.java Wed Apr 29 22:07:34 2009
@@ -21,6 +21,7 @@
 
 package org.apache.tiles;
 
+import static org.apache.tiles.CompareUtil.*;
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -491,4 +492,14 @@
             renderer = attribute.getRenderer();
         }
     }
+
+    /** {@inheritDoc} */
+    @Override
+    public boolean equals(Object obj) {
+        Attribute attribute = (Attribute) obj;
+        return nullSafeEquals(value, attribute.value)
+                || nullSafeEquals(renderer, attribute.renderer)
+                || nullSafeEquals(roles, attribute.roles)
+                || nullSafeEquals(expression, attribute.expression);
+    }
 }

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContext.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContext.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContext.java Wed Apr 29 22:07:34 2009
@@ -123,6 +123,23 @@
     PrintWriter getPrintWriter() throws IOException;
 
     /**
+     * Sets the content type when rendering the result.
+     *
+     * @param contentType The content type. It should follow the specifications
+     * from W3C about content types.
+     * @since 2.2.0
+     */
+    void setContentType(String contentType);
+
+    /**
+     * Checks if the response has been committed.
+     *
+     * @return <code>true</code> only if the response has been committed.
+     * @since 2.2.0
+     */
+    boolean isResponseCommitted();
+
+    /**
      * Return an immutable Map that maps request parameter names to the first
      * (or only) value (as a String).
      *

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/context/TilesRequestContextWrapper.java Wed Apr 29 22:07:34 2009
@@ -113,6 +113,16 @@
     }
 
     /** {@inheritDoc} */
+    public boolean isResponseCommitted() {
+        return context.isResponseCommitted();
+    }
+
+    /** {@inheritDoc} */
+    public void setContentType(String contentType) {
+        context.setContentType(contentType);
+    }
+
+    /** {@inheritDoc} */
     public Map<String, String> getParam() {
         return context.getParam();
     }

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java Wed Apr 29 22:07:34 2009
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.tiles.Initializable;
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.awareness.TilesApplicationContextAware;
@@ -113,6 +114,11 @@
     protected Map<String, AttributeRenderer> renderers;
 
     /**
+     * Initialization parameters, as passed by the constructor.
+     */
+    private Map<String, String> initParameters;
+
+    /**
      * The default renderer.
      *
      * @since 2.1.0
@@ -140,6 +146,7 @@
 
     /** {@inheritDoc} */
     public void init(Map<String, String> parameters) {
+        this.initParameters = parameters;
         String defaultRendererParam = parameters.get(DEFAULT_RENDERER_INIT_PARAM);
         if (defaultRendererParam == null) {
             defaultRendererParam = DEFAULT_RENDERER_CLASS_NAME;
@@ -250,5 +257,8 @@
         if (renderer instanceof AttributeEvaluatorAware) {
             ((AttributeEvaluatorAware) renderer).setEvaluator(evaluator);
         }
+        if (renderer instanceof Initializable && initParameters != null) {
+            ((Initializable) renderer).init(initParameters);
+        }
     }
 }

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/MockOnlyLocaleTilesContext.java Wed Apr 29 22:07:34 2009
@@ -90,6 +90,16 @@
     }
 
     /** {@inheritDoc} */
+    public boolean isResponseCommitted() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    public void setContentType(String contentType) {
+        // Does nothing
+    }
+
+    /** {@inheritDoc} */
     public Map<String, String[]> getHeaderValues() {
         return null;
     }

Modified: tiles/framework/trunk/tiles-freemarker/pom.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-freemarker/pom.xml?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-freemarker/pom.xml (original)
+++ tiles/framework/trunk/tiles-freemarker/pom.xml Wed Apr 29 22:07:34 2009
@@ -76,5 +76,10 @@
     	<version>2.4</version>
     	<scope>test</scope>
     </dependency>
+    <dependency>
+    	<groupId>commons-collections</groupId>
+    	<artifactId>commons-collections</artifactId>
+    	<version>3.2.1</version>
+    </dependency>
   </dependencies>
 </project>
\ No newline at end of file

Modified: tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java (original)
+++ tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModel.java Wed Apr 29 22:07:34 2009
@@ -38,7 +38,7 @@
  * parameters, see
  * {@link InsertDefinitionModel#start(org.apache.tiles.TilesContainer, Object...)}
  * and
- * {@link InsertDefinitionModel#end(org.apache.tiles.TilesContainer, String, String, String, String, Object...)}
+ * {@link InsertDefinitionModel#end(org.apache.tiles.TilesContainer, String, String, String, String, String, String, Object...)}
  * .
  *
  * @version $Rev$ $Date$
@@ -71,6 +71,8 @@
         model.end(FreeMarkerUtil.getCurrentContainer(env), FreeMarkerUtil
                 .getAsString(parms.get("name")), FreeMarkerUtil
                 .getAsString(parms.get("template")), FreeMarkerUtil
+                .getAsString(parms.get("templateType")), FreeMarkerUtil
+                .getAsString(parms.get("templateExpression")), FreeMarkerUtil
                 .getAsString(parms.get("role")), FreeMarkerUtil
                 .getAsString(parms.get("preparer")), env);
     }

Modified: tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java (original)
+++ tiles/framework/trunk/tiles-freemarker/src/main/java/org/apache/tiles/freemarker/template/InsertTemplateFMModel.java Wed Apr 29 22:07:34 2009
@@ -38,7 +38,7 @@
  * parameters, see
  * {@link InsertTemplateModel#start(org.apache.tiles.TilesContainer, Object...)}
  * and
- * {@link InsertTemplateModel#end(org.apache.tiles.TilesContainer, String, String, String, Object...)}
+ * {@link InsertTemplateModel#end(org.apache.tiles.TilesContainer, String, String, String, String, String, Object...)}
  * .
  *
  * @version $Rev$ $Date$
@@ -71,6 +71,8 @@
         FreeMarkerUtil.setForceInclude(env, true);
         model.end(FreeMarkerUtil.getCurrentContainer(env), FreeMarkerUtil
                 .getAsString(parms.get("template")), FreeMarkerUtil
+                .getAsString(parms.get("templateType")), FreeMarkerUtil
+                .getAsString(parms.get("templateExpression")), FreeMarkerUtil
                 .getAsString(parms.get("role")), FreeMarkerUtil
                 .getAsString(parms.get("preparer")), env);
     }

Modified: tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java (original)
+++ tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertDefinitionFMModelTest.java Wed Apr 29 22:07:34 2009
@@ -142,11 +142,14 @@
         Attribute attribute = createMock(Attribute.class);
         params.put("name", objectWrapper.wrap("myName"));
         params.put("template", objectWrapper.wrap("myTemplate"));
+        params.put("templateType", objectWrapper.wrap("myTemplateType"));
+        params.put("templateExpression", objectWrapper.wrap("myTemplateExpression"));
         params.put("role", objectWrapper.wrap("myRole"));
         params.put("preparer", objectWrapper.wrap("myPreparer"));
 
         tModel.start(container, env);
-        tModel.end(container, "myName", "myTemplate", "myRole", "myPreparer", env);
+        tModel.end(container, "myName", "myTemplate", "myTemplateType",
+                "myTemplateExpression", "myRole", "myPreparer", env);
         body.render(isA(NullWriter.class));
 
         replay(tModel, body, container, attribute);

Modified: tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertTemplateFMModelTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertTemplateFMModelTest.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertTemplateFMModelTest.java (original)
+++ tiles/framework/trunk/tiles-freemarker/src/test/java/org/apache/tiles/freemarker/template/InsertTemplateFMModelTest.java Wed Apr 29 22:07:34 2009
@@ -142,11 +142,14 @@
         Map<String, Object> params = new HashMap<String, Object>();
         Attribute attribute = createMock(Attribute.class);
         params.put("template", objectWrapper.wrap("myTemplate"));
+        params.put("templateType", objectWrapper.wrap("myTemplateType"));
+        params.put("templateExpression", objectWrapper.wrap("myTemplateExpression"));
         params.put("role", objectWrapper.wrap("myRole"));
         params.put("preparer", objectWrapper.wrap("myPreparer"));
 
         tModel.start(container, env);
-        tModel.end(container, "myTemplate", "myRole", "myPreparer", env);
+        tModel.end(container, "myTemplate", "myTemplateType",
+                "myTemplateExpression", "myRole", "myPreparer", env);
         body.render(isA(NullWriter.class));
 
         replay(tModel, body, container, attribute);

Modified: tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertDefinitionTag.java Wed Apr 29 22:07:34 2009
@@ -80,6 +80,20 @@
     private String template;
 
     /**
+     * The type of the template attribute.
+     *
+     * @since 2.2.0
+     */
+    private String templateType;
+
+    /**
+     * The expression to evaluate to get the value of the template.
+     *
+     * @since 2.2.0
+     */
+    private String templateExpression;
+
+    /**
      * Returns the name of the definition to insert.
      *
      * @return The name of the definition.
@@ -209,6 +223,46 @@
         this.template = template;
     }
 
+    /**
+     * Returns the type of the template attribute.
+     *
+     * @return The template type.
+     * @since 2.2.0
+     */
+    public String getTemplateType() {
+        return templateType;
+    }
+
+    /**
+     * Sets the type of the template attribute.
+     *
+     * @param templateType The template type.
+     * @since 2.2.0
+     */
+    public void setTemplateType(String templateType) {
+        this.templateType = templateType;
+    }
+
+    /**
+     * Returns the expression to evaluate to get the value of the template.
+     *
+     * @return The template expression.
+     * @since 2.2.0
+     */
+    public String getTemplateExpression() {
+        return templateExpression;
+    }
+
+    /**
+     * Sets the expression to evaluate to get the value of the template.
+     *
+     * @param templateExpression The template expression.
+     * @since 2.2.0
+     */
+    public void setTemplateExpression(String templateExpression) {
+        this.templateExpression = templateExpression;
+    }
+
     /** {@inheritDoc} */
     @Override
     public void release() {
@@ -232,7 +286,7 @@
     @Override
     public int doEndTag() throws TilesJspException {
         model.end(JspUtil.getCurrentContainer(pageContext), name, template,
-                role, preparer, pageContext);
+                templateType, templateExpression, role, preparer, pageContext);
         return EVAL_PAGE;
     }
 }

Modified: tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/InsertTemplateTag.java Wed Apr 29 22:07:34 2009
@@ -75,6 +75,20 @@
     private String template;
 
     /**
+     * The type of the template attribute.
+     *
+     * @since 2.2.0
+     */
+    private String templateType;
+
+    /**
+     * The expression to evaluate to get the value of the template.
+     *
+     * @since 2.2.0
+     */
+    private String templateExpression;
+
+    /**
      * Returns the role to check. If the user is in the specified role, the tag is
      * taken into account; otherwise, the tag is ignored (skipped).
      *
@@ -186,6 +200,46 @@
         this.template = template;
     }
 
+    /**
+     * Returns the type of the template attribute.
+     *
+     * @return The template type.
+     * @since 2.2.0
+     */
+    public String getTemplateType() {
+        return templateType;
+    }
+
+    /**
+     * Sets the type of the template attribute.
+     *
+     * @param templateType The template type.
+     * @since 2.2.0
+     */
+    public void setTemplateType(String templateType) {
+        this.templateType = templateType;
+    }
+
+    /**
+     * Returns the expression to evaluate to get the value of the template.
+     *
+     * @return The template expression.
+     * @since 2.2.0
+     */
+    public String getTemplateExpression() {
+        return templateExpression;
+    }
+
+    /**
+     * Sets the expression to evaluate to get the value of the template.
+     *
+     * @param templateExpression The template expression.
+     * @since 2.2.0
+     */
+    public void setTemplateExpression(String templateExpression) {
+        this.templateExpression = templateExpression;
+    }
+
     /** {@inheritDoc} */
     @Override
     protected void reset() {
@@ -207,7 +261,8 @@
     /** {@inheritDoc} */
     @Override
     public int doEndTag() throws TilesJspException {
-        model.end(JspUtil.getCurrentContainer(pageContext), template, role, preparer, pageContext);
+        model.end(JspUtil.getCurrentContainer(pageContext), template,
+                templateType, templateExpression, role, preparer, pageContext);
         return EVAL_PAGE;
     }
 }

Modified: tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/java/org/apache/tiles/jsp/taglib/definition/InitContainerTag.java Wed Apr 29 22:07:34 2009
@@ -53,7 +53,11 @@
  * Init definitions impl.
  *
  * @version $Rev$ $Date$
+ * @deprecated Don't use it, to initialize Tiles use
+ * {@link org.apache.tiles.startup.TilesInitializer} and the various ways to
+ * initialize Tiles, like {@link org.apache.tiles.web.startup.TilesServlet}.
  */
+@Deprecated
 public class InitContainerTag extends TilesBodyTag {
 
     /**
@@ -258,19 +262,18 @@
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("deprecation")
         public Servlet getServlet(String string) throws ServletException {
             return rootContext.getServlet(string);
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings({ "deprecation", "unchecked" })
+        @SuppressWarnings({ "unchecked" })
         public Enumeration getServlets() {
             return rootContext.getServlets();
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings({ "deprecation", "unchecked" })
+        @SuppressWarnings({ "unchecked" })
         public Enumeration getServletNames() {
             return rootContext.getServletNames();
         }
@@ -281,7 +284,6 @@
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("deprecation")
         public void log(Exception exception, String string) {
             rootContext.log(exception, string);
         }

Modified: tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld (original)
+++ tiles/framework/trunk/tiles-jsp/src/main/resources/META-INF/tld/tiles-jsp.tld Wed Apr 29 22:07:34 2009
@@ -41,17 +41,17 @@
       <description>
       <![CDATA[
       <p><strong>Insert a template.</strong></p>
-      <p>Insert a template with the possibility to pass 
+      <p>Insert a template with the possibility to pass
       parameters (called attributes).
       A template can be seen as a procedure that can take parameters or attributes.
-      <code>&lt;tiles:insertTemplate&gt;</code> allows to define these attributes 
+      <code>&lt;tiles:insertTemplate&gt;</code> allows to define these attributes
       and pass them to the inserted jsp page, called template.
       Attributes are defined using nested tag
       <code>&lt;tiles:putAttribute&gt;</code> or
       <code>&lt;tiles:putListAttribute&gt;</code>.
       </p>
       <p>You must specify <code>template</code> attribute, for inserting a template</p>
-     
+
       <p><strong>Example : </strong></p>
       <pre>
         <code>
@@ -85,7 +85,7 @@
          <type>boolean</type>
          <description>
          <![CDATA[
-         <p>True or false. If true, current page out stream is flushed 
+         <p>True or false. If true, current page out stream is flushed
          before insertion.</p>
          ]]>
          </description>
@@ -132,16 +132,16 @@
       <description>
       <![CDATA[
       <p><strong>Insert a definition.</strong></p>
-      <p>Insert a definition with the possibility to override and specify 
+      <p>Insert a definition with the possibility to override and specify
       parameters (called attributes).
       A definition can be seen as a (partially or totally) filled template that
       can override or complete attribute values.
-      <code>&lt;tiles:insertDefinition&gt;</code> allows to define these attributes 
+      <code>&lt;tiles:insertDefinition&gt;</code> allows to define these attributes
       and pass them to the inserted jsp page, called template.
       Attributes are defined using nested tag <code>&lt;tiles:putAttribute&gt;</code> or
       <code>&lt;tiles:putListAttribute&gt;</code>.
       </p>
-      <p>You must specify <code>name</code> tag attribute, for inserting a definition from 
+      <p>You must specify <code>name</code> tag attribute, for inserting a definition from
         definitions factory.</p>
       <p><strong>Example : </strong></p>
       <pre>
@@ -174,7 +174,7 @@
          <description>
          <![CDATA[
          <p>A string representing the URI of a template (for example, a JSP
-         page) that will override the one used by the definition itself. 
+         page) that will override the one used by the definition itself.
          </p>
          ]]>
          </description>
@@ -186,7 +186,7 @@
          <type>boolean</type>
          <description>
          <![CDATA[
-         <p>True or false. If true, current page out stream is flushed 
+         <p>True or false. If true, current page out stream is flushed
          before insertion.</p>
          ]]>
          </description>
@@ -234,13 +234,13 @@
       <![CDATA[
       <p><strong>Inserts the value of an attribute into the page.</strong></p>
       <p>This tag can be flexibly used to insert the value of an attribute into a page.
-      As in other usages in Tiles, every attribute can be determined to have a "type", 
+      As in other usages in Tiles, every attribute can be determined to have a "type",
       either set explicitly when it was defined, or "computed".  If the type is not explicit, then
       if the attribute value is a valid definition, it will be inserted as such.  Otherwise,
-      if it begins with a "/" character, it will be treated as a "template".  Finally, if it 
-      has not otherwise been assigned a type, it will be treated as a String and included without 
+      if it begins with a "/" character, it will be treated as a "template".  Finally, if it
+      has not otherwise been assigned a type, it will be treated as a String and included without
       any special handling.</p>
-     
+
       <p><strong>Example : </strong></p>
       <pre>
         <code>
@@ -279,7 +279,7 @@
          <type>boolean</type>
          <description>
          <![CDATA[
-         <p>True or false. If true, current page out stream is flushed 
+         <p>True or false. If true, current page out stream is flushed
          before insertion.</p>
          ]]>
          </description>
@@ -374,7 +374,7 @@
          <rtexprvalue>true</rtexprvalue>
          <description>
          <![CDATA[
-         <p>Specifies the name under which the newly created definition bean 
+         <p>Specifies the name under which the newly created definition bean
          will be saved.</p>
          ]]>
          </description>
@@ -385,7 +385,7 @@
          <rtexprvalue>true</rtexprvalue>
          <description>
          <![CDATA[
-         <p>A string representing the URI of a template 
+         <p>A string representing the URI of a template
          (a JSP page).</p>
          ]]>
          </description>
@@ -396,7 +396,7 @@
          <rtexprvalue>true</rtexprvalue>
          <description>
          <![CDATA[
-         <p>Role to check before inserting this definition. If role is not 
+         <p>Role to check before inserting this definition. If role is not
          defined for current user, definition is not inserted. Checking is
          done at insert time, not during definition process.</p>
          ]]>
@@ -408,7 +408,7 @@
          <rtexprvalue>true</rtexprvalue>
          <description>
          <![CDATA[
-         <p>Name of a parent definition that is used to initialize this new 
+         <p>Name of a parent definition that is used to initialize this new
          definition. Parent definition is searched in definitions factory.</p>
          ]]>
          </description>
@@ -433,11 +433,11 @@
       <![CDATA[
       <p><strong>Put an attribute in enclosing attribute container tag.</strong></p>
 		<p>
-		Enclosing attribute container tag can be : 
+		Enclosing attribute container tag can be :
 		<ul>
-		<li>&lt;initContainer&gt;</li> 
-		<li>&lt;definition&gt;</li> 
-		<li>&lt;insertAttribute&gt;</li> 
+		<li>&lt;initContainer&gt;</li>
+		<li>&lt;definition&gt;</li>
+		<li>&lt;insertAttribute&gt;</li>
 		<li>&lt;insertDefinition&gt;</li>
 		<li>&lt;putListAttribute&gt;</li>
 		</ul>
@@ -591,7 +591,7 @@
       <![CDATA[
       <p><strong>Add an element to the surrounding list.
       Equivalent to 'putAttribute', but for list element.</strong></p>
-          
+
       <p>Add an element to the surrounding list.
       This tag can only be used inside 'putListAttribute' or 'addListAttribute' tags.
       Value can come from a direct assignment (value="aValue")</p>
@@ -662,8 +662,8 @@
       <p><strong>
       Render the value of the specified template attribute to the current JspWriter
       </strong></p>
-          
-      <p>Retrieve the value of the specified template attribute 
+
+      <p>Retrieve the value of the specified template attribute
       property, and render it to the current JspWriter as a String.
       The usual toString() conversions is applied on found value.</p>
       <p>Throw a JSPException if named value is not found.</p>
@@ -716,7 +716,7 @@
       <description>
       <![CDATA[
       <p><strong>Use attribute value inside page.</strong></p>
-      <p>Declare a Java variable, and an attribute in the specified scope, 
+      <p>Declare a Java variable, and an attribute in the specified scope,
       using its attribute value.</p>
       <p>Java variable and attribute will have the name specified by 'id',
       or the original name if not specified.</p>
@@ -788,7 +788,7 @@
       <p>Import attribute(s) to requested scope.
       Attribute name and scope are optional. If not specified, all
       attributes are imported in page scope.
-      Once imported, an attribute can be used as any other beans from jsp 
+      Once imported, an attribute can be used as any other beans from jsp
       contexts.</p>
       ]]>
       </description>
@@ -831,8 +831,8 @@
          <type>boolean</type>
          <description>
          <![CDATA[
-         <p>If this attribute is set to true, and the attribute specified by 
-         the name does not exist, simply return without error. The default 
+         <p>If this attribute is set to true, and the attribute specified by
+         the name does not exist, simply return without error. The default
          value is false, which will cause a runtime exception to be thrown.</p>
          ]]>
          </description>
@@ -844,6 +844,8 @@
       <body-content>JSP</body-content>
       <description>
       <![CDATA[
+      <p><strong>THIS TAG HAS BEEN DEPRECATED! Please use TilesInitializer or a
+      servlet-based way, like TilesServlet, for initialization!</strong></p>
       <p><strong>Initialize the TilesContainer.</strong></p>
       <p>
       In order to use the Tiles system, a TilesContainer must be instantiated.

Modified: tiles/framework/trunk/tiles-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java (original)
+++ tiles/framework/trunk/tiles-portlet/src/main/java/org/apache/tiles/portlet/context/PortletTilesRequestContext.java Wed Apr 29 22:07:34 2009
@@ -310,6 +310,16 @@
     }
 
     /** {@inheritDoc} */
+    public boolean isResponseCommitted() {
+        return ((RenderResponse) response).isCommitted();
+    }
+
+    /** {@inheritDoc} */
+    public void setContentType(String contentType) {
+        ((RenderResponse) response).setContentType(contentType);
+    }
+
+    /** {@inheritDoc} */
     public Object[] getRequestObjects() {
         if (requestObjects == null) {
             requestObjects = new Object[2];

Modified: tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletHeaderMap.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletHeaderMap.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletHeaderMap.java (original)
+++ tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletHeaderMap.java Wed Apr 29 22:07:34 2009
@@ -30,6 +30,7 @@
 import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.tiles.context.MapEntry;
 
@@ -47,9 +48,23 @@
      * Constructor.
      *
      * @param request The request object to use.
+     * @deprecated Use {@link #ServletHeaderMap(HttpServletRequest,HttpServletResponse)} instead
      */
     public ServletHeaderMap(HttpServletRequest request) {
+        this(request, null);
+    }
+
+
+    /**
+     * Constructor.
+     *
+     * @param request The request object to use.
+     * @param response The response object to use.
+     * @since 2.2.0
+     */
+    public ServletHeaderMap(HttpServletRequest request, HttpServletResponse response) {
         this.request = request;
+        this.response = response;
     }
 
 
@@ -58,6 +73,11 @@
      */
     private HttpServletRequest request = null;
 
+    /**
+     * The request object to use.
+     */
+    private HttpServletResponse response = null;
+
 
     /** {@inheritDoc} */
     public void clear() {
@@ -149,13 +169,17 @@
 
     /** {@inheritDoc} */
     public String put(String key, String value) {
-        throw new UnsupportedOperationException();
+        response.setHeader(key, value);
+        return value;
     }
 
 
     /** {@inheritDoc} */
     public void putAll(Map<? extends String, ? extends String> map) {
-        throw new UnsupportedOperationException();
+        for (Map.Entry<? extends String, ? extends String> entry : map
+                .entrySet()) {
+            response.setHeader(entry.getKey(), entry.getValue());
+        }
     }
 
 

Modified: tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java (original)
+++ tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletTilesRequestContext.java Wed Apr 29 22:07:34 2009
@@ -148,7 +148,7 @@
     public Map<String, String> getHeader() {
 
         if ((header == null) && (request != null)) {
-            header = new ServletHeaderMap(request);
+            header = new ServletHeaderMap(request, response);
         }
         return (header);
 
@@ -286,6 +286,16 @@
     }
 
     /** {@inheritDoc} */
+    public boolean isResponseCommitted() {
+        return response.isCommitted();
+    }
+
+    /** {@inheritDoc} */
+    public void setContentType(String contentType) {
+        response.setContentType(contentType);
+    }
+
+    /** {@inheritDoc} */
     public Locale getRequestLocale() {
         return request.getLocale();
     }

Modified: tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java (original)
+++ tiles/framework/trunk/tiles-servlet/src/main/java/org/apache/tiles/servlet/context/ServletUtil.java Wed Apr 29 22:07:34 2009
@@ -31,8 +31,11 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
 import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.context.TilesRequestContextWrapper;
 import org.apache.tiles.impl.NoSuchContainerException;
 import org.apache.tiles.util.TilesIOException;
 
@@ -261,4 +264,47 @@
         }
         return composeStack;
     }
+
+    /**
+     * Opens a TilesRequestContext until it finds a ServletTilesRequestContext.
+     *
+     * @param request The request to open.
+     * @return The servlet-based request context.
+     * @throws NotAServletEnvironmentException If a servlet-based request
+     * context could not be found.
+     * @since 2.2.0
+     */
+	public static ServletTilesRequestContext getServletRequest(TilesRequestContext request) {
+		TilesRequestContext currentRequest = request;
+		while (true) {
+			if (currentRequest == null) {
+				throw new NotAServletEnvironmentException("Last Tiles request context is null");
+			}
+
+			if (currentRequest instanceof ServletTilesRequestContext) {
+				return (ServletTilesRequestContext) currentRequest;
+			}
+			if (!(currentRequest instanceof TilesRequestContextWrapper)) {
+				throw new NotAServletEnvironmentException("Not a Servlet environment, not supported");
+			}
+			currentRequest = ((TilesRequestContextWrapper) currentRequest).getWrappedRequest();
+		}
+	}
+
+    /**
+     * Gets a servlet context from a TilesApplicationContext.
+     *
+     * @param applicationContext The application context to analyze.
+     * @return The servlet context.
+     * @throws NotAServletEnvironmentException If the application context is not
+     * servlet-based.
+     * @since 2.2.0
+     */
+	public static ServletContext getServletContext(TilesApplicationContext applicationContext) {
+		if (applicationContext instanceof ServletTilesApplicationContext) {
+			return (ServletContext) ((ServletTilesApplicationContext) applicationContext).getContext();
+		}
+
+		throw new NotAServletEnvironmentException("Not a Servlet-based environment");
+	}
 }

Modified: tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java (original)
+++ tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertDefinitionModel.java Wed Apr 29 22:07:34 2009
@@ -81,6 +81,8 @@
      * @param definitionName The name of the definition to render.
      * @param template If specified, this template will be used instead of the
      * one used by the definition.
+     * @param templateType The type of the template attribute.
+     * @param templateExpression The expression to evaluate to get the value of the template.
      * @param role A comma-separated list of roles. If present, the definition
      * will be rendered only if the current user belongs to one of the roles.
      * @param preparer The preparer to use to invoke before the definition is
@@ -90,8 +92,8 @@
      * @since 2.2.0
      */
     public void end(TilesContainer container, String definitionName,
-            String template, String role, String preparer,
-            Object... requestItems) {
+            String template, String templateType, String templateExpression,
+            String role, String preparer, Object... requestItems) {
         try {
             AttributeContext attributeContext = container
                     .getAttributeContext(requestItems);
@@ -113,6 +115,8 @@
      * @param definitionName The name of the definition to render.
      * @param template If specified, this template will be used instead of the
      * one used by the definition.
+     * @param templateType The type of the template attribute.
+     * @param templateExpression The expression to evaluate to get the value of the template.
      * @param role A comma-separated list of roles. If present, the definition
      * will be rendered only if the current user belongs to one of the roles.
      * @param preparer The preparer to use to invoke before the definition is
@@ -122,9 +126,9 @@
      * @since 2.2.0
      */
     public void execute(TilesContainer container, String definitionName,
-            String template, String role, String preparer,
-            Object... requestItems) {
+            String template, String templateType, String templateExpression,
+            String role, String preparer, Object... requestItems) {
         start(container, requestItems);
-        end(container, definitionName, template, role, preparer, requestItems);
+        end(container, definitionName, template, templateType, templateExpression, role, preparer, requestItems);
     }
 }

Modified: tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertTemplateModel.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertTemplateModel.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertTemplateModel.java (original)
+++ tiles/framework/trunk/tiles-template/src/main/java/org/apache/tiles/template/InsertTemplateModel.java Wed Apr 29 22:07:34 2009
@@ -79,6 +79,8 @@
      *
      * @param container The Tiles container.
      * @param template The template to render.
+     * @param templateType The type of the template attribute.
+     * @param templateExpression The expression to evaluate to get the value of the template.
      * @param role A comma-separated list of roles. If present, the template
      * will be rendered only if the current user belongs to one of the roles.
      * @param preparer The preparer to use to invoke before the definition is
@@ -87,14 +89,18 @@
      * @param requestItems The request objects.
      * @since 2.2.0
      */
-    public void end(TilesContainer container, String template, String role,
-            String preparer, Object... requestItems) {
+    public void end(TilesContainer container, String template, String templateType,
+            String templateExpression, String role, String preparer, Object... requestItems) {
         try {
             AttributeContext attributeContext = container
                     .getAttributeContext(requestItems);
             Attribute templateAttribute = Attribute
                     .createTemplateAttribute(template);
             templateAttribute.setRole(role);
+            if (templateType != null) {
+                templateAttribute.setRenderer(templateType);
+            }
+            templateAttribute.setExpression(templateExpression);
             attributeContext.setPreparer(preparer);
             attributeContext.setTemplateAttribute(templateAttribute);
             container.renderContext(requestItems);
@@ -108,6 +114,8 @@
      *
      * @param container The Tiles container.
      * @param template The template to render.
+     * @param templateType The type of the template attribute.
+     * @param templateExpression The expression to evaluate to get the value of the template.
      * @param role A comma-separated list of roles. If present, the template
      * will be rendered only if the current user belongs to one of the roles.
      * @param preparer The preparer to use to invoke before the definition is
@@ -116,9 +124,9 @@
      * @param requestItems The request objects.
      * @since 2.2.0
      */
-    public void execute(TilesContainer container, String template, String role,
-            String preparer, Object... requestItems) {
+    public void execute(TilesContainer container, String template, String templateType,
+            String templateExpression, String role, String preparer, Object... requestItems) {
         start(container, requestItems);
-        end(container, template, role, preparer, requestItems);
+        end(container, template, templateType, templateExpression, role, preparer, requestItems);
     }
 }

Modified: tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertDefinitionModelTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertDefinitionModelTest.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertDefinitionModelTest.java (original)
+++ tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertDefinitionModelTest.java Wed Apr 29 22:07:34 2009
@@ -69,7 +69,7 @@
     /**
      * Test method for {@link org.apache.tiles.template.InsertDefinitionModel
      * #end(org.apache.tiles.TilesContainer, java.lang.String, java.lang.String,
-     * java.lang.String, java.lang.String, java.lang.Object[])}.
+     * String, String, java.lang.String, java.lang.String, java.lang.Object[])}.
      */
     @Test
     public void testEnd() {
@@ -84,14 +84,16 @@
         container.render("myDefinitionName", requestItem);
 
         replay(container, attributeContext);
-        model.end(container, "myDefinitionName", "myTemplate", "myRole", "myPreparer", requestItem);
+        model.end(container, "myDefinitionName", "myTemplate",
+                "myTemplateType", "myTemplateExpression", "myRole",
+                "myPreparer", requestItem);
         verify(container, attributeContext);
     }
 
     /**
      * Test method for {@link org.apache.tiles.template.InsertDefinitionModel
      * #execute(org.apache.tiles.TilesContainer, java.lang.String, java.lang.String,
-     * java.lang.String, java.lang.String, java.lang.Object[])}.
+     * String, String, java.lang.String, java.lang.String, java.lang.Object[])}.
      */
     @Test
     public void testExecute() {
@@ -107,7 +109,9 @@
         container.render("myDefinitionName", requestItem);
 
         replay(container, attributeContext);
-        model.execute(container, "myDefinitionName", "myTemplate", "myRole", "myPreparer", requestItem);
+        model.execute(container, "myDefinitionName", "myTemplate",
+                "myTemplateType", "myTemplateExpression", "myRole",
+                "myPreparer", requestItem);
         verify(container, attributeContext);
     }
 

Modified: tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertTemplateModelTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertTemplateModelTest.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertTemplateModelTest.java (original)
+++ tiles/framework/trunk/tiles-template/src/test/java/org/apache/tiles/template/InsertTemplateModelTest.java Wed Apr 29 22:07:34 2009
@@ -68,7 +68,7 @@
 
     /**
      * Test method for {@link org.apache.tiles.template.InsertTemplateModel
-     * #end(TilesContainer, String, String, String, Object...)}.
+     * #end(TilesContainer, String, String, String, String, String, Object...)}.
      */
     @Test
     public void testEnd() {
@@ -83,13 +83,13 @@
         container.renderContext(requestItem);
 
         replay(container, attributeContext);
-        model.end(container, "myTemplate", "myRole", "myPreparer", requestItem);
+        model.end(container, "myTemplate", "myTemplateType", "myTemplateExpression", "myRole", "myPreparer", requestItem);
         verify(container, attributeContext);
     }
 
     /**
      * Test method for {@link org.apache.tiles.template.InsertTemplateModel
-     * #execute(TilesContainer, String, String, String, Object...)}.
+     * #execute(TilesContainer, String, String, String, String, String, Object...)}.
      */
     @Test
     public void testExecute() {
@@ -105,7 +105,7 @@
         container.renderContext(requestItem);
 
         replay(container, attributeContext);
-        model.execute(container, "myTemplate", "myRole", "myPreparer", requestItem);
+        model.execute(container, "myTemplate", "myTemplateType", "myTemplateExpression", "myRole", "myPreparer", requestItem);
         verify(container, attributeContext);
     }
 

Modified: tiles/framework/trunk/tiles-test/pom.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-test/pom.xml?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-test/pom.xml (original)
+++ tiles/framework/trunk/tiles-test/pom.xml Wed Apr 29 22:07:34 2009
@@ -35,7 +35,7 @@
    <name>Tiles - Apps - Test</name>
    <description>Tiles Test web application: tests Tiles functionality.
    </description>
-   
+
    <dependencies>
       <dependency>
          <groupId>${pom.groupId}</groupId>
@@ -113,7 +113,7 @@
         <version>2.5.6</version>
       </dependency>
    </dependencies>
-   
+
    <build>
        <plugins>
           <plugin>
@@ -217,7 +217,7 @@
                 </repository>
             </repositories>
         </profile>
-        
+
         <profile>
             <id>hostedqa</id>
             <dependencies>

Modified: tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java Wed Apr 29 22:07:34 2009
@@ -47,6 +47,7 @@
 import org.apache.tiles.evaluator.el.TilesContextELResolver;
 import org.apache.tiles.factory.BasicTilesContainerFactory;
 import org.apache.tiles.freemarker.context.FreeMarkerTilesRequestContextFactory;
+import org.apache.tiles.freemarker.renderer.FreeMarkerAttributeRenderer;
 import org.apache.tiles.impl.BasicTilesContainer;
 import org.apache.tiles.impl.mgmt.CachingTilesContainer;
 import org.apache.tiles.locale.LocaleResolver;
@@ -54,6 +55,8 @@
 import org.apache.tiles.test.evaluator.el.MultiversionExpressionFactoryFactory;
 import org.apache.tiles.test.renderer.ReverseStringAttributeRenderer;
 import org.apache.tiles.velocity.context.VelocityTilesRequestContextFactory;
+import org.apache.tiles.velocity.renderer.TilesApplicationContextJeeConfig;
+import org.apache.tiles.velocity.renderer.VelocityAttributeRenderer;
 
 
 /**
@@ -112,6 +115,28 @@
         renderer.setRequestContextFactory(contextFactory);
         renderer.setEvaluator(evaluator);
         rendererFactory.registerRenderer("reversed", renderer);
+
+        FreeMarkerAttributeRenderer freemarkerRenderer = new FreeMarkerAttributeRenderer();
+        freemarkerRenderer.setApplicationContext(applicationContext);
+        freemarkerRenderer.setEvaluator(evaluator);
+        freemarkerRenderer.setRequestContextFactory(contextFactory);
+        freemarkerRenderer.setParameter("TemplatePath", "/");
+        freemarkerRenderer.setParameter("NoCache", "true");
+        freemarkerRenderer.setParameter("ContentType", "text/html");
+        freemarkerRenderer.setParameter("template_update_delay", "0");
+        freemarkerRenderer.setParameter("default_encoding", "ISO-8859-1");
+        freemarkerRenderer.setParameter("number_format", "0.##########");
+        freemarkerRenderer.commit();
+        rendererFactory.registerRenderer("freemarker", freemarkerRenderer);
+
+        VelocityAttributeRenderer velocityRenderer = new VelocityAttributeRenderer();
+        velocityRenderer.setApplicationContext(applicationContext);
+        velocityRenderer.setEvaluator(evaluator);
+        velocityRenderer.setRequestContextFactory(contextFactory);
+        velocityRenderer.setParameter("org.apache.velocity.toolbox", "/WEB-INF/tools.xml");
+        velocityRenderer.setParameter("org.apache.velocity.properties", "/WEB-INF/velocity.properties");
+        velocityRenderer.commit();
+        rendererFactory.registerRenderer("velocity", velocityRenderer);
     }
 
     /** {@inheritDoc} */

Modified: tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/freemarker/tiles-defs.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/freemarker/tiles-defs.xml?rev=769961&r1=769960&r2=769961&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/freemarker/tiles-defs.xml (original)
+++ tiles/framework/trunk/tiles-test/src/main/webapp/WEB-INF/freemarker/tiles-defs.xml Wed Apr 29 22:07:34 2009
@@ -35,48 +35,48 @@
   <!-- =======================================================  -->
 
   <!-- Doc index page description  -->
-  <definition name="freemarker.test.inner.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.inner.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is a configured inner definition."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.definition.ignore" template="/freemarker/layout_ignore.ftl">
+  <definition name="freemarker.test.definition.ignore" template="/freemarker/layout_ignore.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.definition.freemarker" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.definition.freemarker" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.definition.flush" template="/freemarker/layout_flush.ftl">
+  <definition name="freemarker.test.definition.flush" template="/freemarker/layout_flush.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.definition.exception" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.definition.exception" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/exception.ftl"/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="header" value="/freemarker/exception.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.composite.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.composite.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is a configured composite definition."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
       <put-attribute name="body"   value="test.inner.definition"/>
   </definition>
 
-  <definition name="freemarker.test.putAttributes" template="/freemarker/putattributeslayout.ftl">
+  <definition name="freemarker.test.putAttributes" template="/freemarker/putattributeslayout.ftl" templateType="freemarker">
     <put-attribute name="stringTest" value="This is a string" type="string" />
     <put-list-attribute name="list">
       <add-attribute value="valueOne" type="string" />
@@ -91,26 +91,26 @@
     </put-list-attribute>
   </definition>
 
-  <definition name="freemarker.test.putAllAttributes" template="/freemarker/putallattributeslayout.ftl">
+  <definition name="freemarker.test.putAllAttributes" template="/freemarker/putallattributeslayout.ftl" templateType="freemarker">
     <put-attribute name="one" value="There should be three more strings" type="string" />
     <put-attribute name="two" value="One" type="string" />
     <put-attribute name="three" value="Two" type="string" />
     <put-attribute name="four" value="Three" type="string" />
   </definition>
 
-  <definition name="freemarker.preparer.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.preparer.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
   </definition>
 
     <definition name="freemarker.testdispatchservlet" extends="test.definition"/>
 
   <definition name="freemarker.preparer.definition.configured" extends="preparer.definition" preparer="org.apache.tiles.test.preparer.TestViewPreparer" />
-  
-  <definition name="freemarker.test.localized.definition" template="/freemarker/layout.ftl">
+
+  <definition name="freemarker.test.localized.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title" value="Default locale" />
-      <put-attribute name="header" value="/freemarker/header.ftl" />
-      <put-attribute name="body" value="/freemarker/defaultlocale.ftl" />
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body" value="/freemarker/defaultlocale.ftl" type="freemarker" />
   </definition>
 
   <definition name="freemarker.test.definition.appears" extends="test.definition">
@@ -128,45 +128,45 @@
   <definition name="freemarker.test.definition.does_not_appear.configured"
     extends="test.definition.does_not_appear" role="badrole" />
 
-  <definition name="freemarker.test.definition.roles" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.definition.roles" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
       <put-attribute name="header" value="/freemarker/header.ftl" role="goodrole" />
       <put-attribute name="body"   value="/freemarker/body.ftl" role="badrole" />
   </definition>
 
-  <definition name="freemarker.test.definition.roles.tags" template="/freemarker/layout_roles.ftl">
+  <definition name="freemarker.test.definition.roles.tags" template="/freemarker/layout_roles.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl" />
-      <put-attribute name="body"   value="/freemarker/body.ftl" />
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
   <!-- Tests for cascaded attributes -->
-  <definition name="freemarker.test.overridden.cascaded.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.overridden.cascaded.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title." cascade="true" />
       <put-attribute name="header" value="/freemarker/alternate-header.ftl" cascade="true"/>
       <put-attribute name="body"   value="test.inner.definition"/>
   </definition>
 
-  <definition name="freemarker.test.inner.cascadable.definition" template="/freemarker/layout.ftl">
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+  <definition name="freemarker.test.inner.cascadable.definition" template="/freemarker/layout.ftl" templateType="freemarker">
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.cascaded.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.cascaded.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title." cascade="true" />
       <put-attribute name="header" value="/freemarker/header.ftl" cascade="true"/>
       <put-attribute name="body"   value="test.inner.cascadable.definition"/>
   </definition>
 
-  <definition name="freemarker.test.cascaded.template.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.cascaded.template.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title." cascade="true" />
       <put-attribute name="header" value="/freemarker/header.ftl" cascade="true"/>
-      <put-attribute name="body"   value="/freemarker/layout_nobody.ftl"/>
+      <put-attribute name="body"   value="/freemarker/layout_nobody.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.cascaded.list.definition" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.cascaded.list.definition" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title." cascade="true" />
       <put-attribute name="header" value="/freemarker/header.ftl" cascade="true"/>
-      <put-attribute name="body"   value="/freemarker/putattributeslayout.ftl"/>
+      <put-attribute name="body"   value="/freemarker/putattributeslayout.ftl" type="freemarker" />
       <put-attribute name="stringTest" value="This is a string" type="string" cascade="true" />
       <put-list-attribute name="list" cascade="true">
         <add-attribute value="valueOne" type="string" />
@@ -175,40 +175,40 @@
       </put-list-attribute>
   </definition>
 
-  <definition name="freemarker.test.reversed.definition" template="/freemarker/layout_alt_title.ftl">
+  <definition name="freemarker.test.reversed.definition" template="/freemarker/layout_alt_title.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title." type="reversed"/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.reversed.explicit.definition" template="/freemarker/layout_alt_title.ftl">
+  <definition name="freemarker.test.reversed.explicit.definition" template="/freemarker/layout_alt_title.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."
           type="org.apache.tiles.test.renderer.ReverseStringAttributeRenderer"/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
-      <put-attribute name="body"   value="/freemarker/body.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.nesting.definitions" template="/freemarker/layout.ftl">
+  <definition name="freemarker.test.nesting.definitions" template="/freemarker/layout.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
       <put-attribute name="body">
-          <definition template="/freemarker/layout.ftl">
+          <definition template="/freemarker/layout.ftl" templateType="freemarker">
               <put-attribute name="title"  value="This is a nested definition."/>
-              <put-attribute name="header" value="/freemarker/header.ftl"/>
-              <put-attribute name="body"   value="/freemarker/body.ftl"/>
+              <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+              <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
           </definition>
       </put-attribute>
   </definition>
 
-  <definition name="freemarker.test.nesting.list.definitions" template="/freemarker/layout_list.ftl">
+  <definition name="freemarker.test.nesting.list.definitions" template="/freemarker/layout_list.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
       <put-list-attribute name="list">
           <add-attribute>
-              <definition template="/freemarker/layout.ftl">
+              <definition template="/freemarker/layout.ftl" templateType="freemarker">
                   <put-attribute name="title"  value="This is a nested definition."/>
-                  <put-attribute name="header" value="/freemarker/header.ftl"/>
-                  <put-attribute name="body"   value="/freemarker/body.ftl"/>
+                  <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+                  <put-attribute name="body"   value="/freemarker/body.ftl" type="freemarker" />
               </definition>
           </add-attribute>
       </put-list-attribute>
@@ -217,29 +217,29 @@
   <definition name="freemarker.test.composite.el.definition" templateExpression="${layout}"
         preparer="org.apache.tiles.test.preparer.RequestSettingViewPreparer">
       <put-attribute name="title"  value="This is a configured composite definition."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
       <put-attribute name="body"   expression="${requestScope.body}"/>
   </definition>
 
   <definition name="freemarker.test.composite.el.doNotShow.definition" templateExpression="${layout}"
         preparer="org.apache.tiles.test.preparer.RequestSettingViewPreparer">
       <put-attribute name="title"  value="This is a configured definition."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
       <put-attribute name="body"   expression="${requestScope.doNotShowBody}"/>
   </definition>
 
-  <definition name="freemarker.test.definition.attribute.preparer" template="/freemarker/layout_preparer.ftl">
+  <definition name="freemarker.test.definition.attribute.preparer" template="/freemarker/layout_preparer.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.openbody.definition" template="/freemarker/layout_closebody.ftl">
+  <definition name="freemarker.test.openbody.definition" template="/freemarker/layout_closebody.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
-      <put-attribute name="header" value="/freemarker/header.ftl"/>
-      <put-attribute name="body"   value="/freemarker/layout.ftl" />
+      <put-attribute name="header" value="/freemarker/header.ftl" type="freemarker" />
+      <put-attribute name="body"   value="/freemarker/layout.ftl" type="freemarker" />
   </definition>
 
-  <definition name="freemarker.test.defaultvalues.definition" template="/freemarker/layout_default.ftl">
+  <definition name="freemarker.test.defaultvalues.definition" template="/freemarker/layout_default.ftl" templateType="freemarker">
       <put-attribute name="title"  value="This is the title."/>
   </definition>
 </tiles-definitions>