You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by bu...@apache.org on 2015/07/27 01:19:57 UTC

svn commit: r959694 [2/5] - in /websites/production/tapestry/content: ./ cache/

Modified: websites/production/tapestry/content/coffeescript.html
==============================================================================
--- websites/production/tapestry/content/coffeescript.html (original)
+++ websites/production/tapestry/content/coffeescript.html Sun Jul 26 23:19:56 2015
@@ -30,9 +30,7 @@
     <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
   <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
   <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -67,8 +65,91 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p><strong>CoffeeScript</strong> (<a shape="rect" class="external-link" href="http://coffeescript.org" >http://coffeescript.org</a>) is a language that compiles down to JavaScript.</p><p><em>Starting with version 5.4,</em> Tapestry can automatically compile your CoffeeScript code into JavaScript on the fly. This is done with the optional tapestry-webresources module. It is highly recommended for anyone who wants to use CoffeeScript in their application ... just let Tapestry do the compilation at runtime (with access to Tapestry's full exception reporting capabilities).</p><p>To use the tapestry-webresources module, just add the JAR to your project. For example, if you're using Maven:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="borde
 r-bottom-width: 1px;"><b>pom.xml (partial)</b></div><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent"><p><strong>CoffeeScript</strong> (<a shape="rect" class="external-link" href="http://coffeescript.org" >http://coffeescript.org</a>) is a language that compiles down to JavaScript.</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="coffeescript.html">CoffeeScript</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="client-side-javascript.html">Client-Side JavaScript</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="javascript-modules.html">JavaScript Modules</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="javascript-faq.html">JavaScript FAQ</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="ajax-and-zones.html">Ajax and Zones</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-cheat-sheet.html">Component Cheat Sheet</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="legacy-javascript.html">Legacy JavaScript</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="assets.html">Assets</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><p><em>Starting with version 5.4,</em> Tapestry can automatically compile your CoffeeScript code into JavaScript on the fly. This is done with the optional tapestry-webresources module. It is highly recommended for anyone who wants to use CoffeeScript in their application ... just let Tapestry do the compilation at runtime (with access to Tapestry's full exception reporting capabilities).</p><p>To use the tapestry-webresources module, just add the JAR to your project. For example, if you're using Maven:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml (partial)</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.tapestry&lt;/groupId&gt;
     &lt;artifactId&gt;tapestry-webresources&lt;/artifactId&gt;

Modified: websites/production/tapestry/content/component-cheat-sheet.html
==============================================================================
--- websites/production/tapestry/content/component-cheat-sheet.html (original)
+++ websites/production/tapestry/content/component-cheat-sheet.html Sun Jul 26 23:19:56 2015
@@ -67,8 +67,91 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p>There's a lot of documentation scattered about describingthe various annotations and methods you can add to Tapestry page and component classes. This is not an <a shape="rect" href="annotations.html">exhaustive list</a>, but rather it covers some of the the more common scenarios.</p><h2 id="ComponentCheatSheet-FieldInjectionAnnotations">Field Injection Annotations</h2><p>Main articles: <a shape="rect" href="component-classes.html">Component Classes</a>, <a shape="rect" href="injection.html">Injection</a>, <a shape="rect" href="annotations.html">Annotations</a></p><h3 id="ComponentCheatSheet-@Inject">@Inject</h3><p>@Inject is the Swiss Army knife of annotations; it's designed to connect your component to services, resources, and other objects. See <a shape="rect" href="injection.html">Injec
 tion</a>.</p><h4 id="ComponentCheatSheet-ServiceInjection">Service Injection</h4><p>In most cases, the injected value is a service; the service is located by type. If there are ambiguities, caused by multiple services implementing the same interface, you'll see injection exceptions. You can resolve those exceptions by adding marker annotations to select a specific service, or by adding @Service to specify the specific service ID you want.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Use of @Service is discouraged. If marker annotations are available, that is preferred.</p></div></div><h3 id="ComponentCheatSheet-@InjectComponent">@InjectComponent</h3><p>Injects a component from this component's template into this component's class. Injecting a component is based on the component's ID, which should match
  the field name. However, the value attribute of the @InjectComponent annotation can be specified as well, this takes precedence over the field name.</p><p>It is common to inject a component in order to obtain its client-side ID (used when generating client-side JavaScript).</p><h3 id="ComponentCheatSheet-@InjectContainer">@InjectContainer</h3><p>Injects the container of a component or, when used in a mixin, injects the component the mixin is attached to.</p><h3 id="ComponentCheatSheet-@InjectPage">@InjectPage</h3><p>Injects a page of the application. Normally, the page to inject is identified based on the field type. The value attribute can be specified, in which case the page to be injected is identified by name.</p><h3 id="ComponentCheatSheet-@Environmental">@Environmental</h3><p>Injects an <a shape="rect" href="environmental-services.html">environmental object</a>; such objects are request scoped but may be overridden at any time using the methods of the Environment service. Env
 ironmental objects are used to allow outer components to communicate with components they enclose.</p><p>Most often, @Environmental is used with type JavaScriptSupport, which is used to add JavaScript code and libraries to the rendered page.</p><h2 id="ComponentCheatSheet-FieldBehaviorAnnotations">Field Behavior Annotations</h2><p>Main articles: <a shape="rect" href="component-classes.html">Component Classes</a>, <a shape="rect" href="annotations.html">Annotations</a></p><h3 id="ComponentCheatSheet-@PageActivationContext">@PageActivationContext</h3><p>This annotation is allowed on a <em>single</em> field; the value of the field will be included in URLs for the page as the page's activation context. This is an alternative to implementing event handler methods<br clear="none"> for the activate and passivate events directly.</p><h3 id="ComponentCheatSheet-@Parameter">@Parameter</h3><p>Marks the field as a component parameter. Attributes of the annotation allow the parameter to be marke
 d as required or optional. If the parameter value will typically be a literal string (for example, the title parameter to a Layout component), you should add <code>defaultPrefix=BindingConstants.LITERAL</code> to the annotation so that users of the component won't have to use the "literal:" binding prefix with the parameter. See <a shape="rect" href="component-parameters.html">Component Parameters</a></p><h3 id="ComponentCheatSheet-@Persist">@Persist</h3><p>Marks the field as a persistent value, one that maintains its value between requests. The default <em>strategy</em> is to simply store the value in the session (which is created as needed). Other strategies can be specified by name as the value attribute. See <a shape="rect" href="persistent-page-data.html">Persistent Page Data</a>.</p><h3 id="ComponentCheatSheet-@Property">@Property</h3><p>Directs Tapestry to automatically generate a getter and a setter for the field, converting it to a JavaBeans property than can be referenced 
 from the template.</p><h3 id="ComponentCheatSheet-@SessionState">@SessionState</h3><p>Marks the field as a Session State Object (SSO). SSOs store global data, and can be injected into any page or component. The SSOs are stored in the session, using a key based on the Java type. SSOs are usually created on demand, but the <code>create</code> attribute can turn this off. See <a shape="rect" href="session-storage.html">Session Storage</a></p><h3 id="ComponentCheatSheet-@SessionAttribute">@SessionAttribute</h3><p>In Tapestry 5.2 and later, marks the field as a Session Attribute. Like Session State Objects (SSO), a Session Attribute is stored in the session, however Session Attributes are stored by using a name you choose rather than based on the Java type. See <a shape="rect" href="session-storage.html">Session Storage</a>.</p><h3 id="ComponentCheatSheet-@ActivationRequestParameter">@ActivationRequestParameter</h3><p>Fields with this annotation will be encoded into URLs as query paramet
 ers, in much the same way as data is encoded into the URL path. The query parameter name matches the field name, unless the value attribute is specified.</p><h2 id="ComponentCheatSheet-MethodAnnotations">Method Annotations</h2><p>Main articles: <a shape="rect" href="component-classes.html">Component Classes</a>, <a shape="rect" href="annotations.html">Annotations</a></p><h3 id="ComponentCheatSheet-@OnEvent">@OnEvent</h3><p>Marks a method as an event handler method. Such methods may have any visibility, and typically use package private visibility (that is, no visibility keyword at all). By default, the method will handle the action event from any component; the value attribute controls the matched event, and the component annotation is used to limit the event source.</p><p>An event handler method may take parameters, corresponding the event context associated with the event, such as the page activation context for the activate event. The method will not be invoked if it defines more
  parameters than there are values in the context.</p><p>The @RequestParameter annotation can be used on parameters, in which case the parameters value comes from a request query parameter, and not from the event context.</p><p>Events fired on a component bubble up the component's container. Return a non-null value to cancel event bubbling. What values may be returned from an event handler method is dependent on the type of event.</p><p>You may also return true to indicate that the event is handled and bubbling should cancel (even for events that do not permit a return value).</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>An alternative to @OnEvent is the naming convention <code>on</code><em>EventName</em> or <code>on</code><em>EventName</em><code>From</code><em>ComponentId</em>.</p></div></div><h3 id="C
 omponentCheatSheet-@Log">@Log</h3><p>Marks the method to be logged for debugging purposes: method entry (with parameters) and exit (with return value) will be logged at debug level, as will any thrown exception. This is primarily for debugging purposes. The Logger name will match the component classes' fully qualified class name.</p><h3 id="ComponentCheatSheet-@CommitAfter">@CommitAfter</h3><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The support for this annotation comes from the <a shape="rect" href="hibernate.html">tapestry-hibernate</a> module or tapestry-jpa module.</p></div></div><h3 id="ComponentCheatSheet-@Cached">@Cached</h3><p>Used on methods that perform expensive operations, such as database queries. The first time such a method is invoked, the return value is cached. Future invocations of the
  same method return the cached value.</p><p>The result cache is per-request and is discarded at the end of the request.</p><p>@Cached only works on methods that take no parameters.</p><h2 id="ComponentCheatSheet-ParameterAnnotations">Parameter Annotations</h2><p>Main article: <a shape="rect" href="component-parameters.html">Component Parameters</a></p><h3 id="ComponentCheatSheet-@RequestParameter">@RequestParameter</h3><p>Used with event handler methods to get the value for the parameter from a request query parameter.</p><h2 id="ComponentCheatSheet-TypeAnnotations">Type Annotations</h2><h3 id="ComponentCheatSheet-@Events">@Events</h3><p>Lists the names of events that may be fired from within this component; used for documentation purposes only.</p><h3 id="ComponentCheatSheet-@Import">@Import</h3><p>Allows JavaScript libraries and CSS stylesheet files to be included in the rendered page. Each such file is added to the page only once, in the order in which the page renders.</p><p>It 
 is allowed to use symbol expansions (with the <code>${...</code>} syntax) inside a library or stylesheet path.</p><p>@Import may also be applied to individual methods, in which case the import operation only occurs when the method is invoked.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When specifying a file to import, you'll often use the prefix <code>context:</code> to indicate that the file is stored in the web application context, and not on the classpath. Relative paths will be on the classpath, relative to the Java class.</p></div></div><h3 id="ComponentCheatSheet-@SupportsInformalParameters">@SupportsInformalParameters</h3><p>Marks the component as allowing informal parameters (extra attributes in the template that do not match formally declared parameters). Normally, informal parameters are si
 mply discarded.</p><p>The method ComponentResources.renderInformalParameters() can be used to include the informal parameters within the element rendered by your component.</p><h3 id="ComponentCheatSheet-@Secure">@Secure</h3><p>Marks the page as accessible only via secure (HTTPs). Any attempt to access the page via standard HTTP will be redirected to the HTTPs version.</p><p>By default, the @Secure annotation is ignored in development mode and only active in production mode.</p><h2 id="ComponentCheatSheet-RenderPhaseMethods">Render Phase Methods</h2><p>Main article: <a shape="rect" href="component-rendering.html">Component Rendering</a></p><p>Render phase methods are close cousins to event handler methods; they are how Tapestry integrates your code into the overall rendering of the page. For each render phase, there's an annotation and corresponding naming convention to define a render phase method:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
  rowspan="1" class="confluenceTh"><p>Annotation</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Method Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>General Use</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@SetupRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>setupRender()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Initializes the component before rendering</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@BeginRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>beginRender()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Renders the element and primary attributes of the component</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@AfterRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>afterRender()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Closes the element started in beginRender()</p></td></
 tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@CleanupRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>cleanupRender()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Performs cleanup after all rendering of the component finishes</p></td></tr></tbody></table></div><p>Render phase methods either take no parameters, or take a single parameter of type MarkupWriter.</p><p>Render phase methods may return <code>void</code>, a <code>boolean</code>, or a <em>renderable object</em>.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Generally, a <code>renderable object</code> is a <a shape="rect" class="external-link" href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/Block.html">Block</a> or a component. The object is pushed onto the stack of rendering operat
 ions, temporarily replacing the current component as the object to be rendered.</p></div></div><p>Returning true is the same as returning void; it means that the component should follow the typical flow:</p><ul><li>@SetupRender</li><li>@BeginRender</li><li>Render the component's template, if any</li><li>Render the component's body</li><li>@AfterRender</li><li>@CleanupRender</li></ul><p>If a component has a template, the component's body will only render if the template contains a &lt;t:body&gt; element. If a component has no template, then it will always render its body (between @BeginRender and @AfterRender).</p><p>A render phase method may also return false, in which case the flow continues to an alternate render phase, as per the chart in the <a shape="rect" href="component-rendering.html">Component Rendering</a> reference page.</p><p>The most common cases:</p><ul><li>return <code>false</code> from @BeginRender to skip the rendering of the component's template and/or body, and co
 ntinue with @AfterRender</li><li>return <code>false</code> from @AfterRender to return to @BeginRender (this is used in component, such as <code>Loop</code>, that render themselves multiple times)</li></ul><h2 id="ComponentCheatSheet-PageLifeCycleMethods">Page Life Cycle Methods</h2><p>Main article: <a shape="rect" href="page-life-cycle.html">Page Life Cycle</a></p><p>Pages have a life cycle and this is represented by a <em>third</em> set of annotations or method naming conventions. Life cycle methods may appear on a page or any component of a page.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Annotation</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Method Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageLoaded</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageLoaded()</p></td><td
  colspan="1" rowspan="1" class="confluenceTd"><p>The page instance has been loaded but not yet attached for the first time.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageAttached</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageAttached()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The page is being used within a particular request. This occurs before the activate event.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageReset</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageReset()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>See notes below.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageDetached</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageDetached()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>End of request notification.</p></td></tr></tbody></table></div><p>Page life cycle methods may be any visibility. The
 y must take no parameters and return void.</p><p>Page life cycle methods are of lower importance starting in Tapestry 5.2, since page instances are now shared across threads, rather than pooled.</p><p>The @PageReset life cycle is new in Tapestry 5.2. It will be invoked on a page render request when linked to from some other page of the application. This is to allow the page to reset its state, if any, when a user returns to the page from some other part of the application.</p><h2 id="ComponentCheatSheet-ConfiguringAnnotations">Configuring Annotations</h2><p>The SymbolProvider service has two interfaces : FactoryDefaults and ApplicationDefaults. Tapestry provides 2 annotations in order to define which implementation you want to override in your AppModule :&#160;</p><ul><li><p>@FactoryDefaults</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule with @FactoryDefaults</b></div><div class="codeCo
 ntent panelContent pdl">
+<div id="ConfluenceContent"><p>This is a summary of the more common annotations and methods you can add to Tapestry pages and component classes.</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-parameters.html">Component Parameters</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="templating-and-markup-faq.html">Templating and Markup FAQ</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-classes.html">Component Classes</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-reference.html">Component Reference</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-libraries.html">Component Libraries</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="page-and-component-classes-faq.html">Page And Component Classes FAQ</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-templates.html">Component Templates</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-cheat-sheet.html">Component Cheat Sheet</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><p>For an exhaustive list, see the <a shape="rect" href="annotations.html">annotations list</a>.</p><h2 id="ComponentCheatSheet-FieldInjectionAnnotations">Field Injection Annotations</h2><p>Main articles: <a shape="rect" href="component-classes.html">Component Classes</a>, <a shape="rect" href="injection.html">Injection</a>, <a shape="rect" href="annotations.html">Annotations</a></p><h3 id="ComponentCheatSheet-@Inject">@Inject</h3><p>@Inject is the Swiss Army knife of annotations; it's designed to connect your component to services, resources, and other objects. See <a shape="rect" href="injection.html">Injection</a>.</p><h4 id="ComponentCheatSheet-ServiceInjection">Service Injection</h4><p>In most cases, the injected value is a service; the service is located by type. If there are ambiguities, caused by multiple services implementing the same interface, you'll see injection exceptions. You can resolve those exceptions by adding marker annotations to select a specific service,
  or by adding @Service to specify the specific service ID you want.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Use of @Service is discouraged. If marker annotations are available, that is preferred.</p></div></div><h3 id="ComponentCheatSheet-@InjectComponent">@InjectComponent</h3><p>Injects a component from this component's template into this component's class. Injecting a component is based on the component's ID, which should match the field name. However, the value attribute of the @InjectComponent annotation can be specified as well, this takes precedence over the field name.</p><p>It is common to inject a component in order to obtain its client-side ID (used when generating client-side JavaScript).</p><h3 id="ComponentCheatSheet-@InjectContainer">@InjectContainer</h3><p>Injects the container of a
  component or, when used in a mixin, injects the component the mixin is attached to.</p><h3 id="ComponentCheatSheet-@InjectPage">@InjectPage</h3><p>Injects a page of the application. Normally, the page to inject is identified based on the field type. The value attribute can be specified, in which case the page to be injected is identified by name.</p><h3 id="ComponentCheatSheet-@Environmental">@Environmental</h3><p>Injects an <a shape="rect" href="environmental-services.html">environmental object</a>; such objects are request scoped but may be overridden at any time using the methods of the Environment service. Environmental objects are used to allow outer components to communicate with components they enclose.</p><p>Most often, @Environmental is used with type JavaScriptSupport, which is used to add JavaScript code and libraries to the rendered page.</p><h2 id="ComponentCheatSheet-FieldBehaviorAnnotations">Field Behavior Annotations</h2><p>Main articles: <a shape="rect" href="compo
 nent-classes.html">Component Classes</a>, <a shape="rect" href="annotations.html">Annotations</a></p><h3 id="ComponentCheatSheet-@PageActivationContext">@PageActivationContext</h3><p>This annotation is allowed on a <em>single</em> field; the value of the field will be included in URLs for the page as the page's activation context. This is an alternative to implementing event handler methods<br clear="none"> for the activate and passivate events directly.</p><h3 id="ComponentCheatSheet-@Parameter">@Parameter</h3><p>Marks the field as a component parameter. Attributes of the annotation allow the parameter to be marked as required or optional. If the parameter value will typically be a literal string (for example, the title parameter to a Layout component), you should add <code>defaultPrefix=BindingConstants.LITERAL</code> to the annotation so that users of the component won't have to use the "literal:" binding prefix with the parameter. See <a shape="rect" href="component-parameters.h
 tml">Component Parameters</a></p><h3 id="ComponentCheatSheet-@Persist">@Persist</h3><p>Marks the field as a persistent value, one that maintains its value between requests. The default <em>strategy</em> is to simply store the value in the session (which is created as needed). Other strategies can be specified by name as the value attribute. See <a shape="rect" href="persistent-page-data.html">Persistent Page Data</a>.</p><h3 id="ComponentCheatSheet-@Property">@Property</h3><p>Directs Tapestry to automatically generate a getter and a setter for the field, converting it to a JavaBeans property than can be referenced from the template.</p><h3 id="ComponentCheatSheet-@SessionState">@SessionState</h3><p>Marks the field as a Session State Object (SSO). SSOs store global data, and can be injected into any page or component. The SSOs are stored in the session, using a key based on the Java type. SSOs are usually created on demand, but the <code>create</code> attribute can turn this off. See
  <a shape="rect" href="session-storage.html">Session Storage</a></p><h3 id="ComponentCheatSheet-@SessionAttribute">@SessionAttribute</h3><p>In Tapestry 5.2 and later, marks the field as a Session Attribute. Like Session State Objects (SSO), a Session Attribute is stored in the session, however Session Attributes are stored by using a name you choose rather than based on the Java type. See <a shape="rect" href="session-storage.html">Session Storage</a>.</p><h3 id="ComponentCheatSheet-@ActivationRequestParameter">@ActivationRequestParameter</h3><p>Fields with this annotation will be encoded into URLs as query parameters, in much the same way as data is encoded into the URL path. The query parameter name matches the field name, unless the value attribute is specified.</p><h2 id="ComponentCheatSheet-MethodAnnotations">Method Annotations</h2><p>Main articles: <a shape="rect" href="component-classes.html">Component Classes</a>, <a shape="rect" href="annotations.html">Annotations</a></p><h
 3 id="ComponentCheatSheet-@OnEvent">@OnEvent</h3><p>Marks a method as an event handler method. Such methods may have any visibility, and typically use package private visibility (that is, no visibility keyword at all). By default, the method will handle the action event from any component; the value attribute controls the matched event, and the component annotation is used to limit the event source.</p><p>An event handler method may take parameters, corresponding the event context associated with the event, such as the page activation context for the activate event. The method will not be invoked if it defines more parameters than there are values in the context.</p><p>The @RequestParameter annotation can be used on parameters, in which case the parameters value comes from a request query parameter, and not from the event context.</p><p>Events fired on a component bubble up the component's container. Return a non-null value to cancel event bubbling. What values may be returned from 
 an event handler method is dependent on the type of event.</p><p>You may also return true to indicate that the event is handled and bubbling should cancel (even for events that do not permit a return value).</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>An alternative to @OnEvent is the naming convention <code>on</code><em>EventName</em> or <code>on</code><em>EventName</em><code>From</code><em>ComponentId</em>.</p></div></div><h3 id="ComponentCheatSheet-@Log">@Log</h3><p>Marks the method to be logged for debugging purposes: method entry (with parameters) and exit (with return value) will be logged at debug level, as will any thrown exception. This is primarily for debugging purposes. The Logger name will match the component classes' fully qualified class name.</p><h3 id="ComponentCheatSheet-@CommitAfter
 ">@CommitAfter</h3><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The support for this annotation comes from the <a shape="rect" href="hibernate.html">tapestry-hibernate</a> module or tapestry-jpa module.</p></div></div><h3 id="ComponentCheatSheet-@Cached">@Cached</h3><p>Used on methods that perform expensive operations, such as database queries. The first time such a method is invoked, the return value is cached. Future invocations of the same method return the cached value.</p><p>The result cache is per-request and is discarded at the end of the request.</p><p>@Cached only works on methods that take no parameters.</p><h2 id="ComponentCheatSheet-ParameterAnnotations">Parameter Annotations</h2><p>Main article: <a shape="rect" href="component-parameters.html">Component Parameters</a></p><h3 id="ComponentChea
 tSheet-@RequestParameter">@RequestParameter</h3><p>Used with event handler methods to get the value for the parameter from a request query parameter.</p><h2 id="ComponentCheatSheet-TypeAnnotations">Type Annotations</h2><h3 id="ComponentCheatSheet-@Events">@Events</h3><p>Lists the names of events that may be fired from within this component; used for documentation purposes only.</p><h3 id="ComponentCheatSheet-@Import">@Import</h3><p>Allows JavaScript libraries and CSS stylesheet files to be included in the rendered page. Each such file is added to the page only once, in the order in which the page renders.</p><p>It is allowed to use symbol expansions (with the <code>${...</code>} syntax) inside a library or stylesheet path.</p><p>@Import may also be applied to individual methods, in which case the import operation only occurs when the method is invoked.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-war
 ning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>When specifying a file to import, you'll often use the prefix <code>context:</code> to indicate that the file is stored in the web application context, and not on the classpath. Relative paths will be on the classpath, relative to the Java class.</p></div></div><h3 id="ComponentCheatSheet-@SupportsInformalParameters">@SupportsInformalParameters</h3><p>Marks the component as allowing informal parameters (extra attributes in the template that do not match formally declared parameters). Normally, informal parameters are simply discarded.</p><p>The method ComponentResources.renderInformalParameters() can be used to include the informal parameters within the element rendered by your component.</p><h3 id="ComponentCheatSheet-@Secure">@Secure</h3><p>Marks the page as accessible only via secure (HTTPs). Any attempt to access the page via standard HTTP will be redirected to the HTTPs version.</p>
 <p>By default, the @Secure annotation is ignored in development mode and only active in production mode.</p><h2 id="ComponentCheatSheet-RenderPhaseMethods">Render Phase Methods</h2><p>Main article: <a shape="rect" href="component-rendering.html">Component Rendering</a></p><p>Render phase methods are close cousins to event handler methods; they are how Tapestry integrates your code into the overall rendering of the page. For each render phase, there's an annotation and corresponding naming convention to define a render phase method:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Annotation</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Method Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>General Use</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@SetupRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>setupRender()</p></td><td colspan="1" row
 span="1" class="confluenceTd"><p>Initializes the component before rendering</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@BeginRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>beginRender()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Renders the element and primary attributes of the component</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@AfterRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>afterRender()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Closes the element started in beginRender()</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@CleanupRender</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>cleanupRender()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Performs cleanup after all rendering of the component finishes</p></td></tr></tbody></table></div><p>Render phase methods either take no parameters, or take a single
  parameter of type MarkupWriter.</p><p>Render phase methods may return <code>void</code>, a <code>boolean</code>, or a <em>renderable object</em>.</p><div class="confluence-information-macro confluence-information-macro-note"><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Generally, a <code>renderable object</code> is a <a shape="rect" class="external-link" href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/Block.html">Block</a> or a component. The object is pushed onto the stack of rendering operations, temporarily replacing the current component as the object to be rendered.</p></div></div><p>Returning true is the same as returning void; it means that the component should follow the typical flow:</p><ul><li>@SetupRender</li><li>@BeginRender</li><li>Render the component's template, if any</li><li>Render the component's body</li><li>@AfterRender</li><li>@CleanupRende
 r</li></ul><p>If a component has a template, the component's body will only render if the template contains a &lt;t:body&gt; element. If a component has no template, then it will always render its body (between @BeginRender and @AfterRender).</p><p>A render phase method may also return false, in which case the flow continues to an alternate render phase, as per the chart in the <a shape="rect" href="component-rendering.html">Component Rendering</a> reference page.</p><p>The most common cases:</p><ul><li>return <code>false</code> from @BeginRender to skip the rendering of the component's template and/or body, and continue with @AfterRender</li><li>return <code>false</code> from @AfterRender to return to @BeginRender (this is used in component, such as <code>Loop</code>, that render themselves multiple times)</li></ul><h2 id="ComponentCheatSheet-PageLifeCycleMethods">Page Life Cycle Methods</h2><p>Main article: <a shape="rect" href="page-life-cycle.html">Page Life Cycle</a></p><p>Page
 s have a life cycle and this is represented by a <em>third</em> set of annotations or method naming conventions. Life cycle methods may appear on a page or any component of a page.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Annotation</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Method Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageLoaded</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageLoaded()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The page instance has been loaded but not yet attached for the first time.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageAttached</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageAttached()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The page is being used within a p
 articular request. This occurs before the activate event.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageReset</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageReset()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>See notes below.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>@PageDetached</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>pageDetached()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>End of request notification.</p></td></tr></tbody></table></div><p>Page life cycle methods may be any visibility. They must take no parameters and return void.</p><p>Page life cycle methods are of lower importance starting in Tapestry 5.2, since page instances are now shared across threads, rather than pooled.</p><p>The @PageReset life cycle is new in Tapestry 5.2. It will be invoked on a page render request when linked to from some other page of the application. This is to allow the pag
 e to reset its state, if any, when a user returns to the page from some other part of the application.</p><h2 id="ComponentCheatSheet-ConfiguringAnnotations">Configuring Annotations</h2><p>The SymbolProvider service has two interfaces : FactoryDefaults and ApplicationDefaults. Tapestry provides 2 annotations in order to define which implementation you want to override in your AppModule :&#160;</p><ul><li><p>@FactoryDefaults</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>AppModule with @FactoryDefaults</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">@Contribute(SymbolProvider.class)
 @FactoryDefaults
 public void setParam(MappedConfiguration&lt; String, String&gt; configuration){
@@ -80,7 +163,7 @@ public void setParam(MappedConfiguration
 public void setParam(MappedConfiguration&lt; String, String&gt; configuration){
   configuration.add(SymbolConstants.PRODUCTION_MODE, "false");
 }</pre>
-</div></div></li></ul></div>
+</div></div></li></ul><p></p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/component-libraries.html
==============================================================================
--- websites/production/tapestry/content/component-libraries.html (original)
+++ websites/production/tapestry/content/component-libraries.html Sun Jul 26 23:19:56 2015
@@ -67,7 +67,37 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This page has not yet been fully updated for Tapestry 5.4. Things are different and simpler in 5.4 than in previous releases.</p></div></div><h1 id="ComponentLibraries-CreatingComponentLibraries">Creating Component Libraries</h1><p>Nearly every Tapestry application includes a least a couple of custom components, specific to the application. What's exciting about Tapestry is how easy it is to package components for reuse across many applications ... and the fact that applications using a component library need no special configuration.</p><p>A Tapestry component library consists of components (and optionally mixins, pages and component base classes). In addition, a component library will have a module that can define new services (ne
 eded by the components) or configure other services present in Tapestry. Finally, components can be packaged with <em>assets</em>: resources such as images, stylesheets and JavaScript libraries that need to be provided to the client web browser.</p><p>We're going to create a somewhat insipid component that displays a large happy face icon.</p><p>Tapestry doesn't mandate that you use any build system, but we'll assume for the moment that you are using Maven 2. In that case, you'll have a pom.xml file something like the following:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml</b></div><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent"><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>This page has not yet been fully updated for Tapestry 5.4. Things are different and simpler in 5.4 than in previous releases.</p></div></div><h1 id="ComponentLibraries-CreatingComponentLibraries">Creating Component Libraries</h1><p>Nearly every Tapestry application includes a least a couple of custom components, specific to the application. What's exciting about Tapestry is how easy it is to package components for reuse across many applications ... and the fact that applications using a component library need no special configuration.</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-reference.html">Component Reference</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-libraries.html">Component Libraries</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><p>A Tapestry component library consists of components (and optionally mixins, pages and component base classes). In addition, a component library will have a module that can define new services (needed by the components) or configure other services present in Tapestry. Finally, components can be packaged with <em>assets</em>: resources such as images, stylesheets and JavaScript libraries that need to be provided to the client web browser.</p><p>We're going to create a somewhat insipid component that displays a large happy face icon.</p><p>Tapestry doesn't mandate that you use any build system, but we'll assume for the moment that you are using Maven 2. In that case, you'll have a pom.xml file something like the following:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;project&gt;
   &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
   &lt;groupId&gt;org.example&lt;/groupId&gt;

Modified: websites/production/tapestry/content/confluence-site-setup.html
==============================================================================
--- websites/production/tapestry/content/confluence-site-setup.html (original)
+++ websites/production/tapestry/content/confluence-site-setup.html Sun Jul 26 23:19:56 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
-  <script src='/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
-  <script src='/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
-  <script type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -67,8 +57,73 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p>This document describes our web site setup: what is where and how it works.</p><h1 id="ConfluenceSiteSetup-Overview">Overview</h1><p>Most of the web site and documentation (with the notable exception of the Javadoc API pages) are kept in Confluence.</p><p>Since the Confluence instance at <a shape="rect" class="external-link" href="https://cwiki.apache.org/confluence/">https://cwiki.apache.org/confluence/</a> isn't capable of handling a lot of incoming requests, all wiki spaces are statically exported. The SiteExporter program is responsible for that. Once a page in Confluence changes, that page gets re-exported automatically.</p><h2 id="ConfluenceSiteSetup-HowSiteExporterworks">How SiteExporter works</h2><p><em>For more details see the <a shape="rect" class="external-link" href="https://sv
 n.apache.org/repos/asf/tapestry/tapestry-site/trunk/README">SiteExporter README</a>.</em></p><p>SiteExporter is a command-line Java program that is run hourly (currently at 19 minutes after the hour) from Apache's BuildBot. It makes a web service call to Confluence (to its RSS feed, actually) to get a list of pages that have changed since the last run, and the HTML-formatted export of those pages. For each, it post-processes the file (described below). Finally, SiteExporter commits all changed HTML files into Tapestry's part of the Apache Subversion repository, which (nearly instantly) makes it available to the public at <a shape="rect" class="external-link" href="http://tapestry.apache.org">http://tapestry.apache.org</a>, and commit emails are sent to Tapestry's "commits" mailing list.</p><p>Attachments (to Confluence pages) are exported in roughly the same way.</p><p>The time between saving a change in Confluence and seeing the result on the public site is at most 1 hour, dependin
 g on when you do it. If you save a change at 18 minutes after the hour you'll see the change in about a minute. If you publish it at 20 minutes after the hour then you'll have to wait almost an hour.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>HTML files in SVN</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/infra/websites/production/tapestry">https://svn.apache.org/repos/infra/websites/production/tapestry</a></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Cache File</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/infra/websites/production/tapestry/content/cache/main.pageCache">https://svn.apache.org/repos/infra/websites/production/tapestry/content/cache/main.pageCache</a></td></tr><tr><td colspan="1" rowspan="1" class="confluen
 ceTd"><p>SiteExporter source</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk">https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk</a></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Velocity template</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm">https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm</a></td></tr></tbody></table></div><h3 id="ConfluenceSiteSetup-Post-processingHTMLPages">Post-processing HTML Pages</h3><p>HTML pages exported from Confluence are post-processed in several ways before being committed to SVN. Here are just a few of the things going on:</p><ul><li>Tagsoup is used to clean up the HTML.</li><li>The breadcrumb links are updated.</li><li>Empty paragraph (&l
 t;p&gt;) tags are removed from the top of the page.</li><li>{code} macro output (code examples) are detected, and SyntaxHighlighter JavaScript links are added to the page when needed.</li><li>{include} tags (when one Confluence page includes another) are detected, causing the <em>including</em> page to be regenerated autoamtically.</li><li>{children} tags are also detected and handled</li></ul><h2 id="ConfluenceSiteSetup-ManualIntervention">Manual Intervention</h2><p>You can cause the <em>whole site</em> to be republished by deleting the main.pageCache file (above) in the subversion repo. This is usually only needed after changing the template.</p><h2 id="ConfluenceSiteSetup-ChangingSiteExporteritself">Changing SiteExporter itself</h2><p>Currently the SiteExporter source code is an unmodified copy of a program of the same name written by Dan Kulp for the Apache CXF project and also used by Camel, Geronimo, and Struts (and possibly others). It can be customized, but proceed with caut
 ion, because any customizations will make it harder to pull in future changes from the original CXF SiteExporter code. The CXF SiteExporter is likely to change as Confluence versions change.</p><p>To pick up changes to the original CXF SiteExporter code, just compare <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/src/main/java/org/apache/cxf/cwiki">the Tapestry source code</a> with <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/web/src/main/java/org/apache/cxf/cwiki/">the CXF source code</a>.</p><hr><h1 id="ConfluenceSiteSetup-WikiFormattingGuidelines">Wiki Formatting Guidelines</h1><ul><li>Precede annotation names with '@'. If the annotation name is hyperlinked, put the '@' character <em>outside</em> of the link: @[AnnotationType|http://...AnnotationType.html]</li><li>The first reference to a type on a page should be a link to <a shape="rect" class="external-link" href="http://tapestry.apach
 e.org/current/apidocs/">http://tapestry.apache.org/current/apidocs/</a>... (or the component reference)</li><li>Treat the page title as if it were an h0. element, and put top level sections within the page as h1.</li><li>Page names as headings should have All Words Captialized.</li><li>For other headings, only the first word of multi-word headings should be capitalized, e.g. "h2. Naming conventions" (following Wikipedia)</li><li>Use <code>code</code> font for method and property names: <code>myProperty</code>, <code>someMethod()</code>.</li><li>Use the default font for Class names (qualified or not).</li><li>Use the default font for path names.</li><li>Use {code} for listings, not {noformat}.</li><li>Use {noformat} for console output.</li><li>Images and diagrams should be small-sized thumbnails, centered, with no border.</li><li>Use the <a shape="rect" href="since-and-deprecated-user-macros.html">Since and Deprecated</a> macros to mark new or deprecated features.</li><li><em>Propose
 d: Each page should include explicit links to its child pages. Don't rely on the "Child Pages" links at the bottom, which don't carry over to the exported site.</em></li><li><em>Proposed: In pages other than the User Guide pages, subsections that briefly discuss topics that are more fully covered in the User Guide should lead with a "Main Article: [Foo]" line, where Foo is the name of the page in the User Guide. Example: the "Template Localization" section of <a shape="rect" href="component-templates.html">Component Templates</a></em></li><li><em>Proposed: User Guide pages should generally start with a right-floated "Related Articles" box that provides links to related content in the FAQ, Cookbook, Cheat Sheets, etc. <a shape="rect" href="component-classes.html">Example</a></em></li><li><em>Proposed: The lead paragraph should generally lead with the title word or phrase in bold (following Wikipedia)</em></li></ul><h1 id="ConfluenceSiteSetup-Websitestructure">Website structure</h1><p
 >The <a shape="rect" href="index.html">Index</a> page includes the <a shape="rect" href="banner.html">Banner</a> and <a shape="rect" href="key-features.html">Key Features</a> pages as well as the blog posts. Most other pages are just plain pages and may or may not include other parts. In addition the <a shape="rect" href="navigation.html">Navigation</a>, <a shape="rect" href="small-banner.html">Small Banner</a> and <a shape="rect" href="footer.html">Footer</a> pages exist.</p><p>Our SiteExporter template (described above) glues everything together. It adds the contents of the <a shape="rect" href="navigation.html">Navigation</a> and <a shape="rect" href="footer.html">Footer</a> pages in the appropriate places and on all pages except the <a shape="rect" href="index.html">Index</a> page. It also adds the contents of the <a shape="rect" href="small-banner.html">Small Banner</a> page as well as the breadcrumbs navigation.</p><div class="confluence-information-macro confluence-informatio
 n-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>HLS: I've noticed that pages with footnotes that are combined with the {include} macro do not render correctly ... the footnote numbers and anchors reset back to 1 for each included page. Perhaps there's a way to fix that with the template?</p></div></div><h1 id="ConfluenceSiteSetup-Updatingthetemplate">Updating the template</h1><p>You must be a Tapestry committer or otherwise have write access to the subversion repository (see link above).</p><p>To edit the template:</p><ol><li>check out the SiteExporter source project (see link above)</li><li>find and edit the template.vm file</li><li>commit your changes</li></ol></div>
+<div id="ConfluenceContent"><p>This document describes our web site setup: what is where and how it works.</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="building-tapestry-from-source.html">Building Tapestry from Source</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="version-numbers.html">Version Numbers</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="developer-bible.html">Developer Bible</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="release-process.html">Release Process</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="developer-information.html">Developer Information</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="confluence-site-setup.html">Confluence Site Setup</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><h1 id="ConfluenceSiteSetup-Overview">Overview</h1><p>Most of the web site and documentation (with the notable exception of the Javadoc API pages) are kept in Confluence.</p><p>Since the Confluence instance at <a shape="rect" class="external-link" href="https://cwiki.apache.org/confluence/">https://cwiki.apache.org/confluence/</a> isn't capable of handling a lot of incoming requests, all wiki spaces are statically exported. The SiteExporter program is responsible for that. Once a page in Confluence changes, that page gets re-exported automatically.</p><h2 id="ConfluenceSiteSetup-HowSiteExporterworks">How SiteExporter works</h2><p><em>For more details see the <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/README">SiteExporter README</a>.</em></p><p>SiteExporter is a command-line Java program that is run hourly (currently at 19 minutes after the hour) from Apache's BuildBot. It makes a web service call to Confluence (to 
 its RSS feed, actually) to get a list of pages that have changed since the last run, and the HTML-formatted export of those pages. For each, it post-processes the file (described below). Finally, SiteExporter commits all changed HTML files into Tapestry's part of the Apache Subversion repository, which (nearly instantly) makes it available to the public at <a shape="rect" class="external-link" href="http://tapestry.apache.org">http://tapestry.apache.org</a>, and commit emails are sent to Tapestry's "commits" mailing list.</p><p>Attachments (to Confluence pages) are exported in roughly the same way.</p><p>The time between saving a change in Confluence and seeing the result on the public site is at most 1 hour, depending on when you do it. If you save a change at 18 minutes after the hour you'll see the change in about a minute. If you publish it at 20 minutes after the hour then you'll have to wait almost an hour.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><
 td colspan="1" rowspan="1" class="confluenceTd"><p>HTML files in SVN</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/infra/websites/production/tapestry">https://svn.apache.org/repos/infra/websites/production/tapestry</a></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Cache File</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/infra/websites/production/tapestry/content/cache/main.pageCache">https://svn.apache.org/repos/infra/websites/production/tapestry/content/cache/main.pageCache</a></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>SiteExporter source</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk">https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk</a></td></tr><t
 r><td colspan="1" rowspan="1" class="confluenceTd"><p>Velocity template</p></td><td colspan="1" rowspan="1" class="confluenceTd"><a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm">https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/template/template.vm</a></td></tr></tbody></table></div><h3 id="ConfluenceSiteSetup-Post-processingHTMLPages">Post-processing HTML Pages</h3><p>HTML pages exported from Confluence are post-processed in several ways before being committed to SVN. Here are just a few of the things going on:</p><ul><li>Tagsoup is used to clean up the HTML.</li><li>The breadcrumb links are updated.</li><li>Empty paragraph (&lt;p&gt;) tags are removed from the top of the page.</li><li>{code} macro output (code examples) are detected, and SyntaxHighlighter JavaScript links are added to the page when needed.</li><li>{include} tags (when one Confluence page includes another) are detected, causi
 ng the <em>including</em> page to be regenerated autoamtically.</li><li>{children} tags are also detected and handled</li></ul><h2 id="ConfluenceSiteSetup-ManualIntervention">Manual Intervention</h2><p>You can cause the <em>whole site</em> to be republished by deleting the main.pageCache file (above) in the subversion repo. This is usually only needed after changing the template.</p><h2 id="ConfluenceSiteSetup-ChangingSiteExporteritself">Changing SiteExporter itself</h2><p>Currently the SiteExporter source code is an unmodified copy of a program of the same name written by Dan Kulp for the Apache CXF project and also used by Camel, Geronimo, and Struts (and possibly others). It can be customized, but proceed with caution, because any customizations will make it harder to pull in future changes from the original CXF SiteExporter code. The CXF SiteExporter is likely to change as Confluence versions change.</p><p>To pick up changes to the original CXF SiteExporter code, just compare <a
  shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/tapestry/tapestry-site/trunk/src/main/java/org/apache/cxf/cwiki">the Tapestry source code</a> with <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/web/src/main/java/org/apache/cxf/cwiki/">the CXF source code</a>.</p><hr><h1 id="ConfluenceSiteSetup-WikiFormattingGuidelines">Wiki Formatting Guidelines</h1><ul><li>Precede annotation names with '@'. If the annotation name is hyperlinked, put the '@' character <em>outside</em> of the link: @[AnnotationType|http://...AnnotationType.html]</li><li>The first reference to a type on a page should be a link to <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/">http://tapestry.apache.org/current/apidocs/</a>... (or the component reference)</li><li>Treat the page title as if it were an h0. element, and put top level sections within the page as h1.</li><li>Page names as headings should have All Words Capt
 ialized.</li><li>For other headings, only the first word of multi-word headings should be capitalized, e.g. "h2. Naming conventions" (following Wikipedia)</li><li>Use <code>code</code> font for method and property names: <code>myProperty</code>, <code>someMethod()</code>.</li><li>Use the default font for Class names (qualified or not).</li><li>Use the default font for path names.</li><li>Use {code} for listings, not {noformat}.</li><li>Use {noformat} for console output.</li><li>Images and diagrams should be small-sized thumbnails, centered, with no border.</li><li>Use the <a shape="rect" href="since-and-deprecated-user-macros.html">Since and Deprecated</a> macros to mark new or deprecated features.</li><li><em>Proposed: Each page should include explicit links to its child pages. Don't rely on the "Child Pages" links at the bottom, which don't carry over to the exported site.</em></li><li><em>Proposed: In pages other than the User Guide pages, subsections that briefly discuss topics 
 that are more fully covered in the User Guide should lead with a "Main Article: [Foo]" line, where Foo is the name of the page in the User Guide. Example: the "Template Localization" section of <a shape="rect" href="component-templates.html">Component Templates</a></em></li><li><em>Proposed: User Guide pages should generally start with a right-floated "Related Articles" box that provides links to related content in the FAQ, Cookbook, Cheat Sheets, etc. <a shape="rect" href="component-classes.html">Example</a></em></li><li><em>Proposed: The lead paragraph should generally lead with the title word or phrase in bold (following Wikipedia)</em></li></ul><h1 id="ConfluenceSiteSetup-Websitestructure">Website structure</h1><p>The <a shape="rect" href="index.html">Index</a> page includes the <a shape="rect" href="banner.html">Banner</a> and <a shape="rect" href="key-features.html">Key Features</a> pages as well as the blog posts. Most other pages are just plain pages and may or may not inclu
 de other parts. In addition the <a shape="rect" href="navigation.html">Navigation</a>, <a shape="rect" href="small-banner.html">Small Banner</a> and <a shape="rect" href="footer.html">Footer</a> pages exist.</p><p>Our SiteExporter template (described above) glues everything together. It adds the contents of the <a shape="rect" href="navigation.html">Navigation</a> and <a shape="rect" href="footer.html">Footer</a> pages in the appropriate places and on all pages except the <a shape="rect" href="index.html">Index</a> page. It also adds the contents of the <a shape="rect" href="small-banner.html">Small Banner</a> page as well as the breadcrumbs navigation.</p><div class="confluence-information-macro confluence-information-macro-warning"><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>HLS: I've noticed that pages with footnotes that are combined with the {include} macro do not render corr
 ectly ... the footnote numbers and anchors reset back to 1 for each included page. Perhaps there's a way to fix that with the template?</p></div></div><h1 id="ConfluenceSiteSetup-Updatingthetemplate">Updating the template</h1><p>You must be a Tapestry committer or otherwise have write access to the subversion repository (see link above).</p><p>To edit the template:</p><ol><li>check out the SiteExporter source project (see link above)</li><li>find and edit the template.vm file</li><li>commit your changes</li></ol></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/default-parameter.html
==============================================================================
--- websites/production/tapestry/content/default-parameter.html (original)
+++ websites/production/tapestry/content/default-parameter.html Sun Jul 26 23:19:56 2015
@@ -67,8 +67,55 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><h1 id="DefaultParameter-DefaultParameter">Default Parameter</h1><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p>Many of the components provided with Tapestry share a common behavior: if the component's id matches a property of the container, then some parameter of the component (usually value) defaults to that property.</p><p>This is desirable, in terms of not having to specify the component's id and then specify the same value as some other parameter.</p><p>Let's say you have created a component, <code>RichTextEditor</code>, which operates like a normal TextArea component, but provides a JavaScript rich text editor. You might start with something like:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent"><p>Many of the components provided with Tapestry share a common behavior: if the component's id matches a property of the container, then some parameter of the component (usually value) defaults to that property.</p><div class="aui-label" style="float:right" title="Related Articles">
+
+
+
+
+
+
+
+
+<h3>Related Articles</h3>
+
+<ul class="content-by-label"><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="enum-parameter-recipe.html">Enum Parameter Recipe</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="supporting-informal-parameters.html">Supporting Informal Parameters</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="default-parameter.html">Default Parameter</a>
+                
+                        
+                    </div>
+    </li><li>
+        <div>
+                <span class="icon aui-icon aui-icon-small aui-iconfont-page-default" title="Page">Page:</span>        </div>
+
+        <div class="details">
+                        <a shape="rect" href="component-parameters.html">Component Parameters</a>
+                
+                        
+                    </div>
+    </li></ul>
+</div><p>This is desirable, in terms of not having to specify the component's id and then specify the same value as some other parameter.</p><p>Let's say you have created a component, <code>RichTextEditor</code>, which operates like a normal TextArea component, but provides a JavaScript rich text editor. You might start with something like:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">public class RichTextEditor implements Field
 {
   @Property