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 2007/04/27 17:09:57 UTC

svn commit: r533133 - in /tiles/site/src/site: apt/tutorial/advanced/index.apt apt/tutorial/advanced/preparer.apt apt/tutorial/advanced/runtime.apt apt/tutorial/advanced/utils.apt apt/tutorial/basic/pages.apt apt/tutorial/index.apt site.xml

Author: apetrelli
Date: Fri Apr 27 08:09:56 2007
New Revision: 533133

URL: http://svn.apache.org/viewvc?view=rev&rev=533133
Log:
TILESSHARED-10
Added more tutorial pages (2).

Added:
    tiles/site/src/site/apt/tutorial/advanced/utils.apt   (with props)
Modified:
    tiles/site/src/site/apt/tutorial/advanced/index.apt
    tiles/site/src/site/apt/tutorial/advanced/preparer.apt
    tiles/site/src/site/apt/tutorial/advanced/runtime.apt
    tiles/site/src/site/apt/tutorial/basic/pages.apt
    tiles/site/src/site/apt/tutorial/index.apt
    tiles/site/src/site/site.xml

Modified: tiles/site/src/site/apt/tutorial/advanced/index.apt
URL: http://svn.apache.org/viewvc/tiles/site/src/site/apt/tutorial/advanced/index.apt?view=diff&rev=533133&r1=533132&r2=533133
==============================================================================
--- tiles/site/src/site/apt/tutorial/advanced/index.apt (original)
+++ tiles/site/src/site/apt/tutorial/advanced/index.apt Fri Apr 27 08:09:56 2007
@@ -30,13 +30,15 @@
   [[1]] {{{nesting-extending.html}Nesting and Extending Definitions}}
 
   [[2]] {{{list-attributes.html}List Attributes}}
+        
+  [[3]] {{{runtime.html}Runtime Composition}}
 
-  [[3]] {{{preparer.html}View Preparers}}
+  [[4]] {{{preparer.html}View Preparers}}
   
-  [[4]] {{{l10n.html}Tiles Localization}}
-        
-  [[5]] {{{runtime.html}Creating Definitions at Runtime}}
+  [[5]] {{{utils.html}Rendering Utilities}}
+  
+  [[6]] {{{l10n.html}Tiles Localization}}
   
-  [[6]] {{{beans.html}Using Beans as attributes}}
+  [[7]] {{{beans.html}Using Beans as attributes}}
   
-  [[7]] {{{menu.html}Menu-ing support}}
+  [[8]] {{{menu.html}Menu-ing support}}

Modified: tiles/site/src/site/apt/tutorial/advanced/preparer.apt
URL: http://svn.apache.org/viewvc/tiles/site/src/site/apt/tutorial/advanced/preparer.apt?view=diff&rev=533133&r1=533132&r2=533133
==============================================================================
--- tiles/site/src/site/apt/tutorial/advanced/preparer.apt (original)
+++ tiles/site/src/site/apt/tutorial/advanced/preparer.apt Fri Apr 27 08:09:56 2007
@@ -21,6 +21,60 @@
          Tiles View Preparers
          -----------
 
-Introduction
+View Preparers
 
-  This is the introduction
+  Sometimes a definition, before it is rendered, needs to be "prepared". For
+  example when showing a menu, the menu structure must be created and stored
+  in the request scope.
+  
+  For this reason, a <<View Preparer>> can be used: it is called <<before>> the
+  definition is rendered, so all the things needed to render correctly the
+  definition can be prepared.
+
+* Creating a view preparer
+
+  A View Preparer is simply a class that implement the <<<ViewPreparer>>>
+  interface. The <<<execute>>> method allows to execute code <<before>> a
+  definition is rendered. You can extend the <<<ViewPreparerSupport>>> class to
+  avoid compiling problems in the case the <<<ViewPreparer>>> interface changes.
+
+----------------------------------------------
+package my.package;
+
+import org.apache.tiles.preparer.PreparerException;
+import org.apache.tiles.preparer.ViewPreparer;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.AttributeContext;
+import org.apache.tiles.Attribute;
+
+public class TestViewPreparer implements ViewPreparer {
+
+    public void execute(TilesRequestContext tilesContext, AttributeContext attributeContext)
+    throws PreparerException {
+        attributeContext.putAttribute(
+            "body",
+            new Attribute("This is the value added by the ViewPreparer"));
+    }
+}
+----------------------------------------------
+
+* Associating a preparer
+
+  To associate a preparer to a definition, put its complete path name to the
+  <<<preparer>>> attribute of the <<<\<definition\>>>> element:
+
+----------------------------------------------
+<definition name="preparer.definition" preparer="org.apache.tiles.test.preparer.TestViewPreparer">
+  <put-attribute name="foo" value="/bar/foo.jsp" />
+</definition>  
+----------------------------------------------
+
+* Customizing View Preparer association
+
+  Currently the preparer is associated to a definition using its class name.
+  There will be only <<one>> instance per unique class name. If you want to
+  customize this behaviour, you have to create your own implementation of the
+  <<<PreparerFactory>>> interface.
+  
+  For example, the {{{../integration/frameworks.html}Struts 1 - Tiles 2 integration}}
+  defines a <<<PreparerFactory>>> that can use a URL as a preparer.

Modified: tiles/site/src/site/apt/tutorial/advanced/runtime.apt
URL: http://svn.apache.org/viewvc/tiles/site/src/site/apt/tutorial/advanced/runtime.apt?view=diff&rev=533133&r1=533132&r2=533133
==============================================================================
--- tiles/site/src/site/apt/tutorial/advanced/runtime.apt (original)
+++ tiles/site/src/site/apt/tutorial/advanced/runtime.apt Fri Apr 27 08:09:56 2007
@@ -18,9 +18,137 @@
 ~~ under the License.
 ~~
          -----------
-         Creating Tiles Definitions at Runtime
+         Tiles Runtime Composition
          -----------
 
-Introduction
+Tiles Runtime Composition
 
-  This is the introduction
+  Tiles allows to create statically-determined page structures, like we've seen
+  in {{{../basic/pages.html}Creating Pages}}. But Tiles allows to fill
+  templates, modify definitions and create new definitions during the execution.
+
+Runtime Composition in JSP pages
+
+  Making runtime changes in JSP pages is pretty simple. You can use special JSP
+  tags that allow to create page structures on-the-fly.
+
+* Inserting templates
+
+  You can insert a template directly inside a JSP page, filling its attributes
+  at runtime. To do it, you can use the <<<\<tiles:insertTemplate\>>>> tag. The
+  attributes can be put using <<<\<tiles:putAttribute\>>>> and related tags.
+
+-----------------------------------
+<tiles:insertTemplate template="/layouts/classic.jsp">
+  <tiles:putAttribute name="title" value="Tiles tutorial homepage" />
+  <tiles:putAttribute name="header" value="/tiles/banner.jsp" />
+  <tiles:putAttribute name="menu" value="/tiles/common_menu.jsp" />
+  <tiles:putAttribute name="body">
+    <tiles:insertTemplate template="/layouts/variable_rows.jsp">
+      <tiles:putListAttribute name="items">
+        <tiles:addAttribute value="/tiles/banner.jsp" />
+        <tiles:addAttribute value="/tiles/common_menu.jsp" />
+        <tiles:addAttribute value="/tiles/credits.jsp" />
+      </tiles:putListAttribute>
+    </tiles:insertTemplate>
+  </tiles:putAttribute
+  <tiles:putAttribute name="footer" value="/tiles/credits.jsp" />
+</tiles:insertTemplate>
+-----------------------------------
+
+* Inserting modified definitions
+
+  Definitions can be inserted not only just as they are, but also overriding
+  their attributes at runtime:
+
+------------------------------------
+<tiles:insertDefinition name="myapp.homepage.customer">
+  <tiles:putAttribute name="menu" value="/tiles/common_menu_for_customers.jsp" />
+</tiles:insertDefinition>
+------------------------------------
+
+  Note: Currently it is not possible to override a template at runtime.
+
+* Creating Definitions
+
+  To create definitions at runtime, first of all you need to configure your
+  Tiles-based application to use a
+  {{{../../config-reference.html#org.apache.tiles.CONTAINER_FACTORY.mutable}mutable container}}.
+  
+  In your JSP page, now you can create definitions. This definition will be
+  available during the request, and then it will expire.
+
+-----------------------------------------
+<tiles:definition name="myapp.homepage.customer" extends="myapp.homepage">
+  <tiles:putAttribute name="menu" value="/tiles/common_menu_for_customers.jsp" />
+</tiles:insertDefinition>
+<tiles:insertDefinition name="myapp.homepage.customer" />
+-----------------------------------------
+
+Runtime Composition using APIs
+
+  If you want to compose pages using the Tiles APIs, for example in a servlet
+  environment, you can use the <<container>> feature of Tiles. Essentially Tiles
+  is a container that stores definitions, allow to render pages and allows to
+  modify the configuration at runtime.
+  
+* Using the Tiles container
+
+  To get the current container (in a servlet environment) you can use the
+  <<TilesAccess>> class:
+  
+-------------------------------------
+TilesContainer container = TilesAccess.getContainer(
+        request.getSession().getServletContext());
+-------------------------------------
+
+  If you want to render a template including the values of its attributes, you
+  can use an <<<AttributeContext>>>: this object stores the current values of
+  all the configured attributes.
+
+--------------------------------------
+TilesAttributeContext attributeContext = container.getAttributeContext(request,
+        response);
+--------------------------------------
+
+  You can create (push) and destroy (pop) a temporary attribute context during
+  your execution, by using the <<startContext>> and <<endContext>> methods of
+  the Tiles container:
+
+--------------------------------------
+TilesAttributeContext attributeContext = container.startContext(request,
+        response);
+attributeContext.setAttribute("body", "/tiles/body_customer.jsp");
+container.render("myapp.homepage", request, response);
+container.endContext(request, response);
+--------------------------------------
+
+  You can forward/include a template page: if there is an attribute context that
+  contains all of its attributes filled, it will be rendered correctly.
+
+--------------------------------------
+TilesAttributeContext attributeContext = container.startContext(request,
+        response);
+attributeContext.setAttribute("body", "/tiles/body_customer.jsp");
+// Put all the other attributes.
+RequestDispatcher rd = request.getRequestDispatcher("/layouts/my_template.jsp");
+rd.forward(request, response);
+container.endContext(request, response);
+--------------------------------------
+
+* Creating Definitions
+
+  To create definitions at runtime, first of all you need to configure your
+  Tiles-based application to use a
+  {{{../../config-reference.html#org.apache.tiles.CONTAINER_FACTORY.mutable}mutable container}}.
+
+  This is a snippet to show how to create a definition.
+
+-------------------------------------
+MutableTilesContainer container = TilesAccess.getContainer(
+        request.getSession().getServletContext());
+TileDefinition definition = new TileDefinition();
+definition.setTemplate("/layouts/my_layout.jsp");
+definition.putAttribute("body", new Attribute("/tiles/body.jsp");
+container.register(definition, request, response);
+-------------------------------------

Added: tiles/site/src/site/apt/tutorial/advanced/utils.apt
URL: http://svn.apache.org/viewvc/tiles/site/src/site/apt/tutorial/advanced/utils.apt?view=auto&rev=533133
==============================================================================
--- tiles/site/src/site/apt/tutorial/advanced/utils.apt (added)
+++ tiles/site/src/site/apt/tutorial/advanced/utils.apt Fri Apr 27 08:09:56 2007
@@ -0,0 +1,74 @@
+~~ $Id$
+~~
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements.  See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership.  The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License.  You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied.  See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+~~
+         -----------
+         Rendering Utilities
+         -----------
+
+Tiles Rendering Utilities
+
+  The core package of Tiles contains utilities to render Tiles definitions
+  without the need of a JSP page or a supporting framework.
+
+* <<<TilesDispatchServlet>>>
+
+  The <<<TilesDispatchServlet>>> is a servlet that intercepts the URLs ending
+  with "<<<.tiles>>>" and render the definition whose name is the path name
+  before the "<<<.tiles>>>" part.
+  
+  For example, if you call the <<<testdispatchservlet.tiles>>> path, the
+  rendered definition will be <<<testdispatchservlet>>>.
+
+  You can configure the <<<TilesDispatchServlet>>> this way:
+
+------------------------------------
+<servlet>
+    <servlet-name>Tiles Dispatch Servlet</servlet-name>
+    <servlet-class>org.apache.tiles.web.TilesDispatchServlet</servlet-class>
+</servlet>
+...
+<servlet-mapping>
+    <servlet-name>Tiles Dispatch Servlet</servlet-name>
+    <url-pattern>*.tiles</url-pattern>
+</servlet-mapping>
+------------------------------------
+
+* <<<TilesDecorationFilter>>>
+
+  You can use the <<<TilesDecorationFilter>>> to use Tiles as a <decorator>
+  framework. All the requests intercepted by the filter will be put inside the
+  configured attribute of the configured definition, and then that definition is
+  rendered.
+  
+  You can configure the filter this way:
+
+------------------------------------
+<filter>
+    <filter-name>Tiles Decoration Filter</filter-name>
+    <filter-class>org.apache.tiles.web.TilesDecorationFilter</filter-class>
+    <init-param>
+        <param-name>definition</param-name>
+        <param-value>test.definition</param-value>
+    </init-param>
+    <init-param>
+        <param-name>attribute-name</param-name>
+        <param-value>body</param-value>
+    </init-param>
+</filter>
+------------------------------------

Propchange: tiles/site/src/site/apt/tutorial/advanced/utils.apt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/site/src/site/apt/tutorial/advanced/utils.apt
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/site/src/site/apt/tutorial/basic/pages.apt
URL: http://svn.apache.org/viewvc/tiles/site/src/site/apt/tutorial/basic/pages.apt?view=diff&rev=533133&r1=533132&r2=533133
==============================================================================
--- tiles/site/src/site/apt/tutorial/basic/pages.apt (original)
+++ tiles/site/src/site/apt/tutorial/basic/pages.apt Fri Apr 27 08:09:56 2007
@@ -134,7 +134,7 @@
 container.render("myapp.homepage", request, response);
 -----------------------------------
 
-  []
+  * by using {{{../advanced/utils.html}Rendering Utilities}} provided by Tiles.
   
   * by using a supporting framework. See
   {{{../integration/index.html}Integrations}} for a list of supporting

Modified: tiles/site/src/site/apt/tutorial/index.apt
URL: http://svn.apache.org/viewvc/tiles/site/src/site/apt/tutorial/index.apt?view=diff&rev=533133&r1=533132&r2=533133
==============================================================================
--- tiles/site/src/site/apt/tutorial/index.apt (original)
+++ tiles/site/src/site/apt/tutorial/index.apt Fri Apr 27 08:09:56 2007
@@ -44,16 +44,18 @@
         [[1]] {{{advanced/nesting-extending.html}Nesting and Extending Definitions}}
 
         [[2]] {{{advanced/list-attributes.html}List Attributes}}
-
-        [[3]] {{{advanced/preparer.html}View Preparers}}
-  
-        [[4]] {{{advanced/l10n.html}Tiles Localization}}
         
-        [[5]] {{{advanced/runtime.html}Creating Definitions at Runtime}}
+        [[3]] {{{advanced/runtime.html}Runtime Composition}}
+
+        [[4]] {{{advanced/preparer.html}View Preparers}}
+
+  		[[5]] {{{utils.html}Rendering Utilities}}
+
+        [[6]] {{{advanced/l10n.html}Tiles Localization}}
   
-        [[6]] {{{advanced/beans.html}Using Beans as attributes}}
+        [[7]] {{{advanced/beans.html}Using Beans as attributes}}
   
-        [[7]] {{{advanced/menu.html}Menu-ing support}}
+        [[8]] {{{advanced/menu.html}Menu-ing support}}
   
   [[6]] {{{integration/index.html}Integration with other technologies}}
   

Modified: tiles/site/src/site/site.xml
URL: http://svn.apache.org/viewvc/tiles/site/src/site/site.xml?view=diff&rev=533133&r1=533132&r2=533133
==============================================================================
--- tiles/site/src/site/site.xml (original)
+++ tiles/site/src/site/site.xml Fri Apr 27 08:09:56 2007
@@ -93,14 +93,17 @@
                             name="List Attributes"
                             href="/tutorial/advanced/list-attributes.html"/>
                     <item   
+                            name="Runtime Composition"
+                            href="/tutorial/advanced/runtime.html"/>
+                    <item   
                             name="View Preparers"
                             href="/tutorial/advanced/preparer.html"/>
                     <item   
+                            name="Rendering Utilities"
+                            href="/tutorial/advanced/utils.html"/>
+                    <item   
                             name="Localization"
                             href="/tutorial/advanced/l10n.html"/>
-                    <item   
-                            name="Creating Definitions at Runtime"
-                            href="/tutorial/advanced/runtime.html"/>
                     <item   
                             name="Using Beans as Attributes"
                             href="/tutorial/advanced/beans.html"/>