~~ $Id: freemarker.apt 774103 2009-05-12 21:41:29Z apetrelli $
~~
~~ 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.
~~
         -----------
         Integration with FreeMarker
         -----------

Integration with FreeMarker

  {{{http://freemarker.sourceforge.net/}FreeMarker}} is a templating framework
  that can be used as a replacement for JavaServer Pages (JSP). Tiles can be
  used with FreeMarker through the use of Tiles FreeMarker package.

* Configuration

  To use FreeMarker together with Tiles

  * Add FreeMarker jars (tested with FreeMarker 2.3.15).

  * Add <<<tiles-template-x.x.x.jar>>> and <<<tiles-freemarker-x.x.x.jar>>> files
  to your application

  * To access ".ftl" files from HTTP requests, add this piece of configuration in <<<web.xml>>>
  (the parameters can be modified as needed).

----------------------------------
<servlet>
    <servlet-name>freemarker</servlet-name>
    <servlet-class>org.apache.tiles.freemarker.servlet.TilesFreemarkerServlet</servlet-class>

    <!-- FreemarkerServlet settings: -->
    <init-param>
        <param-name>TemplatePath</param-name>
        <param-value>/</param-value>
    </init-param>
    <init-param>
        <param-name>NoCache</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>ContentType</param-name>
        <param-value>text/html</param-value>
    </init-param>

    <!-- FreeMarker settings: -->
    <init-param>
        <param-name>template_update_delay</param-name>
        <param-value>0</param-value> <!-- 0 is for development only! Use higher value otherwise. -->
    </init-param>
    <init-param>
        <param-name>default_encoding</param-name>
        <param-value>ISO-8859-1</param-value>
    </init-param>
    <init-param>
        <param-name>number_format</param-name>
        <param-value>0.##########</param-value>
    </init-param>

    <load-on-startup>5</load-on-startup>
</servlet>
----------------------------------

  * To access ".ftl" files as attributes, register FreeMarkerAttributeRenderer
  this way (only available in a servlet environment):

----------------------------------
@Override
protected void registerAttributeRenderers(
        BasicRendererFactory rendererFactory, TilesApplicationContext applicationContext,
        TilesRequestContextFactory contextFactory,
        TilesContainer container, AttributeEvaluator evaluator) {
    super.registerAttributeRenderers(rendererFactory, applicationContext, contextFactory,
            container, evaluator);
    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);
}
----------------------------------

  This way you can specify an attribute that is rendered directly using this syntax:

----------------------------------
<put-attribute name="myAttribute" value="/pages/myPage.ftl" type="freemarker" />
----------------------------------

* Usage in FreeMarker templates

  Tiles directives are available this way:

----------------------------------
<@tiles.nameOfDirective>
  Other stuff...
</@tiles.nameOfDirective>
----------------------------------

  For details about directives see the {{{../../apidocs/index.html}Javadocs}}.
