Index: all-docs.html
===================================================================
--- all-docs.html	(revision 1675105)
+++ all-docs.html	(working copy)
@@ -1,7 +1,7 @@
 <html>
 
     <head>
-        <title>wicket-user-guide Documentation</title>
+        <title>wicket-userguide Documentation</title>
     </head>
 
     <body>
@@ -9,6 +9,5 @@
         <a href="gapi/index.html">Groovy API docs</a><br />
 		<a href="guide/index.html">Manual (Page per chapter)</a><br />
 		<a href="guide/single.html">Manual (Single page)</a><br />
-		<a href="guide/single.pdf">Manual (PDF)</a><br />
     </body>
 </html>
Index: gapi/DefaultPackage/BootStrap.html
===================================================================
--- gapi/DefaultPackage/BootStrap.html	(revision 1675105)
+++ gapi/DefaultPackage/BootStrap.html	(working copy)
@@ -6,9 +6,9 @@
 
 <html>
 <head>
-<!-- Generated by groovydoc (2.0.8) on Wed Apr 08 13:05:04 CEST 2015 -->
+<!-- Generated by groovydoc (2.0.8) on Tue Apr 21 21:01:38 CEST 2015 -->
 <title>BootStrap (Groovy Documentation)</title>
-<meta name="date" content="2015-04-08">
+<meta name="date" content="2015-04-21">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <link href="../groovy.ico" type="image/x-icon" rel="shortcut icon">
 <link href="../groovy.ico" type="image/x-icon" rel="icon">
Index: gapi/DefaultPackage/UrlMappings.html
===================================================================
--- gapi/DefaultPackage/UrlMappings.html	(revision 1675105)
+++ gapi/DefaultPackage/UrlMappings.html	(working copy)
@@ -6,9 +6,9 @@
 
 <html>
 <head>
-<!-- Generated by groovydoc (2.0.8) on Wed Apr 08 13:05:04 CEST 2015 -->
+<!-- Generated by groovydoc (2.0.8) on Tue Apr 21 21:01:38 CEST 2015 -->
 <title>UrlMappings (Groovy Documentation)</title>
-<meta name="date" content="2015-04-08">
+<meta name="date" content="2015-04-21">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <link href="../groovy.ico" type="image/x-icon" rel="shortcut icon">
 <link href="../groovy.ico" type="image/x-icon" rel="icon">
Index: gapi/DefaultPackage/package-summary.html
===================================================================
--- gapi/DefaultPackage/package-summary.html	(revision 1675105)
+++ gapi/DefaultPackage/package-summary.html	(working copy)
@@ -2,7 +2,7 @@
 <html>
 <head>
 
-<title>DefaultPackage (wicket-user-guide)</title>
+<title>DefaultPackage (wicket-userguide)</title>
 <META NAME="keywords" CONTENT="DefaultPackage package">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
@@ -11,7 +11,7 @@
 <SCRIPT type="text/javascript">
 function windowTitle()
 {
-    parent.document.title="DefaultPackage (wicket-user-guide)";
+    parent.document.title="DefaultPackage (wicket-userguide)";
 }
 </SCRIPT>
 <NOSCRIPT>
Index: gapi/deprecated-list.html
===================================================================
--- gapi/deprecated-list.html	(revision 1675105)
+++ gapi/deprecated-list.html	(working copy)
@@ -3,8 +3,8 @@
 <html><head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <!-- Generated by groovydoc (2.0.8) on  -->
-<title>Deprecated API (wicket-user-guide)</title>
-<meta name="date" content="2015-04-08">
+<title>Deprecated API (wicket-userguide)</title>
+<meta name="date" content="2015-04-21">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <link href="groovy.ico" type="image/x-icon" rel="shortcut icon">
 <link href="groovy.ico" type="image/x-icon" rel="icon">
@@ -13,7 +13,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Deprecated API (wicket-user-guide)";
+        parent.document.title="Deprecated API (wicket-userguide)";
     }
 }
 </script>
Index: gapi/help-doc.html
===================================================================
--- gapi/help-doc.html	(revision 1675105)
+++ gapi/help-doc.html	(working copy)
@@ -4,10 +4,10 @@
 <html><head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <!-- Generated by groovydoc (2.0.8) on  -->
-<title>API Help (wicket-user-guide)</title>
+<title>API Help (wicket-userguide)</title>
 <link href="groovy.ico" type="image/x-icon" rel="shortcut icon">
 <link href="groovy.ico" type="image/x-icon" rel="icon">
-<meta name="date" content="2015-04-08">
+<meta name="date" content="2015-04-21">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 
 <script type="text/javascript">
@@ -14,7 +14,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="API Help (wicket-user-guide)";
+        parent.document.title="API Help (wicket-userguide)";
     }
 }
 </script>
Index: gapi/index-all.html
===================================================================
--- gapi/index-all.html	(revision 1675105)
+++ gapi/index-all.html	(working copy)
@@ -3,8 +3,8 @@
 <html><head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <!-- Generated by groovydoc (2.0.8) on  -->
-<title>Index (wicket-user-guide)</title>
-<meta name="date" content="2015-04-08">
+<title>Index (wicket-userguide)</title>
+<meta name="date" content="2015-04-21">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <link href="groovy.ico" type="image/x-icon" rel="shortcut icon">
 <link href="groovy.ico" type="image/x-icon" rel="icon">
@@ -12,7 +12,7 @@
 function windowTitle()
 {
     if (location.href.indexOf('is-external=true') == -1) {
-        parent.document.title="Index (wicket-user-guide)";
+        parent.document.title="Index (wicket-userguide)";
     }
 }
 </script>
Index: gapi/index.html
===================================================================
--- gapi/index.html	(revision 1675105)
+++ gapi/index.html	(working copy)
@@ -2,7 +2,7 @@
 <HTML>
 <HEAD>
 <TITLE>
-Index (wicket-user-guide)
+Index (wicket-userguide)
 </TITLE>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <link href="groovy.ico" type="image/x-icon" rel="shortcut icon">
Index: gapi/overview-summary.html
===================================================================
--- gapi/overview-summary.html	(revision 1675105)
+++ gapi/overview-summary.html	(working copy)
@@ -2,7 +2,7 @@
 
 <html>
 <head>
-<title>Overview (wicket-user-guide)</title>
+<title>Overview (wicket-userguide)</title>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <META NAME="keywords" CONTENT="Overview">
 <LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
@@ -11,7 +11,7 @@
 <SCRIPT type="text/javascript">
 function windowTitle()
 {
-    parent.document.title="Overview (wicket-user-guide)";
+    parent.document.title="Overview (wicket-userguide)";
 }
 </SCRIPT>
 <NOSCRIPT>
Index: gapi/spring/package-summary.html
===================================================================
--- gapi/spring/package-summary.html	(revision 1675105)
+++ gapi/spring/package-summary.html	(working copy)
@@ -2,7 +2,7 @@
 <html>
 <head>
 
-<title>spring (wicket-user-guide)</title>
+<title>spring (wicket-userguide)</title>
 <META NAME="keywords" CONTENT="spring package">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
@@ -11,7 +11,7 @@
 <SCRIPT type="text/javascript">
 function windowTitle()
 {
-    parent.document.title="spring (wicket-user-guide)";
+    parent.document.title="spring (wicket-userguide)";
 }
 </SCRIPT>
 <NOSCRIPT>
Index: gapi/spring/resources.html
===================================================================
--- gapi/spring/resources.html	(revision 1675105)
+++ gapi/spring/resources.html	(working copy)
@@ -6,9 +6,9 @@
 
 <html>
 <head>
-<!-- Generated by groovydoc (2.0.8) on Wed Apr 08 13:05:04 CEST 2015 -->
+<!-- Generated by groovydoc (2.0.8) on Tue Apr 21 21:01:38 CEST 2015 -->
 <title>resources (Groovy Documentation)</title>
-<meta name="date" content="2015-04-08">
+<meta name="date" content="2015-04-21">
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <link href="../groovy.ico" type="image/x-icon" rel="shortcut icon">
 <link href="../groovy.ico" type="image/x-icon" rel="icon">
Index: guide/advanced.html
===================================================================
--- guide/advanced.html	(revision 1675105)
+++ guide/advanced.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>17 Wicket advanced topics - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -207,7 +207,7 @@
 </ul><p class="paragraph"/>For example the following behavior prepends a red asterisk to the tag of a form component if this one  is required:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RedAsteriskBehavior <span class="java&#45;keyword">extends</span> Behavior &#123;<p class="paragraph"/>  @Override
   <span class="java&#45;keyword">public</span> void beforeRender(Component component) &#123;
       Response response = component.getResponse();
-      <span class="java&#45;object">StringBuffer</span> asterisktHtml = <span class="java&#45;keyword">new</span> <span class="java&#45;object">StringBuffer</span>(200);<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(componet <span class="java&#45;keyword">instanceof</span> FormComponent 
+      <span class="java&#45;object">StringBuffer</span> asterisktHtml = <span class="java&#45;keyword">new</span> <span class="java&#45;object">StringBuffer</span>(200);<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(component <span class="java&#45;keyword">instanceof</span> FormComponent 
             &#38;&#38; ((FormComponent)component).isRequired())&#123;
         asteriskHtml.append(<span class="java&#45;quote">" &#60;b style=&#34;color:red;font&#45;size:medium&#34;&#62;&#42;&#60;/b&#62;"</span>);
       &#125;  
@@ -374,7 +374,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/ajax.html
===================================================================
--- guide/ajax.html	(revision 1675105)
+++ guide/ajax.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18 Working with AJAX - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -205,7 +205,7 @@
 	    label.setDefaultModelObject(<span class="java&#45;quote">"Another value 4 label."</span>);
 	    target.add(label);
 	&#125;  	
-&#125;;</pre></div><p class="paragraph"/>Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to <code>AjaxRequestTarget</code>. This can be done using one of the two methods seen in paragraph 4.3:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> Label label = <span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"labelComponent"</span>, <span class="java&#45;quote">"Initial value."</span>);
+&#125;;</pre></div><p class="paragraph"/>Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to <code>AjaxRequestTarget</code>. This can be done using one of the two methods seen in <a href="../guide/single.html#keepControl_3" class="guide">paragraph 6.3</a>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> Label label = <span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"labelComponent"</span>, <span class="java&#45;quote">"Initial value."</span>);
 //autogenerate a markup id
 label.setOutputMarkupId(<span class="java&#45;keyword">true</span>);
 add(label);
@@ -227,8 +227,9 @@
 </blockquote>
 
 
+
 <h2 id="ajax_2">18.2 Build-in AJAX components</h2>
-<p class="paragraph"/>Wicket distribution comes with a number of built-in AJAX components ready to be used. Some of them are the ajaxified version of common components like links and buttons, while others are AJAX-specific components.<p class="paragraph"/>AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of appending “Ajax” to the component class name.<p class="paragraph"/>This paragraph provides an overview of what we can find in Wicket to start writing AJAX-enhanced web applications.<p class="paragraph"/><h3>Links and buttons</h3><p class="paragraph"/>In the previous paragraph we have already introduced component AjaxLink. Wicket provides also the ajaxified versions of submitting components SubmitLink and Button which are simply called AjaxSubmitLink and AjaxButton. These components come with a version of methods onSubmit, onError and onAfterSubmit that takes in input also an instance of <code>AjaxRequestTarget</code>.<p class="paragraph"/>Both components are in package <code>org.apache.wicket.ajax.markup.html.form</code>.<p class="paragraph"/><h3>Fallback components</h3><p class="paragraph"/>Building an entire site using AJAX can be risky as some clients may not support this technology. In order to provide an usable version of our site also to these clients, we can use components <code>AjaxFallbackLink</code> and <code>AjaxFallbackButton</code> which are able to automatically degrade to a standard link or to a standard button if client doesn't support AJAX.<p class="paragraph"/><h3>AJAX Checkbox</h3><p class="paragraph"/>Class <code>org.apache.wicket.ajax.markup.html.form.AjaxCheckBox</code> is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is <code>onUpdate(AjaxRequestTarget target)</code>. The component extends standard checkbox component <code>CheckBox</code> adding an <code>AjaxFormComponentUpdatingBehavior</code> to itself (we will see this behavior later in paragraph 16.3.3).<p class="paragraph"/><h3>AJAX editable labels</h3><p class="paragraph"/>An editable label is a special label that can be edited by the user when she/he clicks on it. Wicket ships three different implementations for this component (all inside package <code>org.apache.wicket.extensions.ajax.markup.html</code>):
+<p class="paragraph"/>Wicket distribution comes with a number of built-in AJAX components ready to be used. Some of them are the ajaxified version of common components like links and buttons, while others are AJAX-specific components.<p class="paragraph"/>AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of prepending “Ajax” to the component class name.<p class="paragraph"/>This paragraph provides an overview of what we can find in Wicket to start writing AJAX-enhanced web applications.<p class="paragraph"/><h3>Links and buttons</h3><p class="paragraph"/>In the previous paragraph we have already introduced component AjaxLink. Wicket provides also the ajaxified versions of submitting components SubmitLink and Button which are simply called AjaxSubmitLink and AjaxButton. These components come with a version of methods onSubmit, onError and onAfterSubmit that takes in input also an instance of <code>AjaxRequestTarget</code>.<p class="paragraph"/>Both components are in package <code>org.apache.wicket.ajax.markup.html.form</code>.<p class="paragraph"/><h3>Fallback components</h3><p class="paragraph"/>Building an entire site using AJAX can be risky as some clients may not support this technology. In order to provide an usable version of our site also to these clients, we can use components <code>AjaxFallbackLink</code> and <code>AjaxFallbackButton</code> which are able to automatically degrade to a standard link or to a standard button if client doesn't support AJAX.<p class="paragraph"/><h3>AJAX Checkbox</h3><p class="paragraph"/>Class <code>org.apache.wicket.ajax.markup.html.form.AjaxCheckBox</code> is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is <code>onUpdate(AjaxRequestTarget target)</code>. The component extends standard checkbox component <code>CheckBox</code> adding an <code>AjaxFormComponentUpdatingBehavior</code> to itself (we will see this behavior later in <a href="../guide/single.html#ajax_3" class="guide">paragraph 18.3.3</a>).<p class="paragraph"/><h3>AJAX editable labels</h3><p class="paragraph"/>An editable label is a special label that can be edited by the user when she/he clicks on it. Wicket ships three different implementations for this component (all inside package <code>org.apache.wicket.extensions.ajax.markup.html</code>):
 <ul class="star">
 <li><strong class="bold">AjaxEditableLabel</strong>: it's a basic version of editable label. User can edit the content of the label with a text field. This is also the base class for the other two editable labels.</li>
 <li><strong class="bold">AjaxEditableMultiLineLabel</strong>: this label supports multi-line values and uses a text area as editor component.</li>
@@ -450,7 +451,7 @@
 
 <h2 id="ajax_5">18.5 AJAX request attributes and call listeners</h2>
 <p class="paragraph"/>Starting from version 6.0 Wicket has introduced two entities which allow us to control how an AJAX request is generated on client side and to specify the custom JavaScript code we want to execute during request handling. These entities are class <code>AjaxRequestAttributes</code> and interface <code>IAjaxCallListener</code>, both placed in package <code>org.apache.wicket.ajax.attributes</code>.<p class="paragraph"/>AjaxRequestAttributes exposes the attributes used to generate the JavaScript call invoked on client side to start an AJAX request. Each attribute will be passed as a <a href="http://en.wikipedia.org/wiki/JSON" target="blank">JSON</a> parameter to the JavaScript function <code>Wicket.Ajax.ajax</code> which is responsible for sending the concrete AJAX request. Every JSON parameter is identified by a short name. Here is a partial list of the available parameters:<p class="paragraph"/><table class="wiki-table" cellpadding="0" cellspacing="0" border="0"><tr><th><strong class="bold">Short name</strong></th><th><strong class="bold">Description</strong></th><th><strong class="bold">Default value</strong></th></tr><tr class="table-odd"><td>u</td><td>The callback URL used to serve the AJAX request that will be sent.</td><td>&#160;</td></tr><tr class="table-even"><td>c</td><td>The id of the component that wants to start the AJAX call.</td><td>&#160;</td></tr><tr class="table-odd"><td>e</td><td>A list of event (click, change, etc...) that can trigger the AJAX call.</td><td>domready</td></tr><tr class="table-even"><td>m</td><td>The request method that must be used (GET or POST).</td><td>GET</td></tr><tr class="table-odd"><td>f</td><td>The id of the form that must be submitted with the AJAX call.</td><td>&#160;</td></tr><tr class="table-even"><td>mp</td><td>If the AJAX call involves the submission of a form, this flag indicates whether the data must be encoded using the encoding mode “multipart/form-data”.</td><td>false</td></tr><tr class="table-odd"><td>sc</td><td>The input name of the submitting component of the form</td><td>&#160;</td></tr><tr class="table-even"><td>async</td><td>A boolean parameter that indicates if the AJAX call is asynchronous (true) or not.</td><td>true</td></tr><tr class="table-odd"><td>wr</td><td>Specifies the type of data returned by the AJAX call (XML, HTML, JSON, etc...).</td><td>XML</td></tr><tr class="table-even"><td>bh, pre, bsh, ah, sh, fh, coh</td><td>This is a list of the listeners that are executed on client side (they are JavaScript scripts) during the lifecycle of an AJAX request. Each short name is the abbreviation of one of the methods defined in the interface IAjaxCallListener (see below).</td><td>An empty list</td></tr></table><p class="paragraph"/><blockquote class="note">
-A full list of the available request parameters as well as more details on the related JavaScript code can be found at <a href="https://cwiki.apache.org/confluence/" target="blank">https://cwiki.apache.org/confluence/ display/WICKET/Wicket+Ajax</a> display/WICKET/Wicket+Ajax .
+A full list of the available request parameters as well as more details on the related JavaScript code can be found at <a href="https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax" target="blank">https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax</a> .
 </blockquote><p class="paragraph"/>Parameters 'u' (callback URL) and 'c' (the id of the component) are generated by the AJAX behavior that will serve the AJAX call and they are not accessible through <code>AjaxRequestAttributes</code>.<p class="paragraph"/>Here is the final AJAX function generate for the behavior used in example project <code>AjaxEventBehavior</code> Example:<p class="paragraph"/><div class="code"><pre>Wicket.Ajax.ajax(&#123;<span class="java&#45;quote">"u"</span>:<span class="java&#45;quote">"./?0&#45;1.IBehaviorListener.0&#45;clickCounterLabel"</span>, <span class="java&#45;quote">"e"</span>:<span class="java&#45;quote">"click"</span>,               
                   <span class="java&#45;quote">"c"</span>:<span class="java&#45;quote">"clickCounterLabel1"</span>&#125;);</pre></div><p class="paragraph"/>Even if most of the times we will let Wicket generate request attributes for us, both AJAX components and behaviors give us the chance to modify them overriding their method <code>updateAjaxAttributes (AjaxRequestAttributes attributes)</code>.<p class="paragraph"/>One of the attribute we may need to modify is the list of <code>IAjaxCallListeners</code> returned by method <code>getAjaxCallListeners()</code>.<p class="paragraph"/><code>IAjaxCallListener</code> defines a set of methods which return the JavaScript code (as a <code>CharSequence</code>) that must be executed on client side when the AJAX request handling reaches a given stage:
 <ul class="star">
@@ -545,7 +546,7 @@
 <li>'/ajax/call/complete': called when the AJAX call has completed.</li>
 <li>'/dom/node/removing': called when a component is about to be removed via AJAX. This  happens when component markup is updated via AJAX (i.e. the component itself or one of its containers has been added to <code>AjaxRequestTarget</code>)</li>
 <li>'/dom/node/added': called when a component has been added via AJAX. Just like '/dom/node/removing', this event is triggered when a component is added to <code>AjaxRequestTarget</code>.</li>
-</ul><p class="paragraph"/>The callback function takes in input the following parameters:  attrs, jqXHR, textStatus, jqEvent and errorThrown. The first three parameters are the same seen before with <code>IAjaxCallListener</code> while jqEvent is an event internally fired by Wicket. The last parameter errorThrown indicates if an error has occurred during the AJAX call.<p class="paragraph"/>To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in chapter 14. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
+</ul><p class="paragraph"/>The callback function takes in input the following parameters:  attrs, jqXHR, textStatus, jqEvent and errorThrown. The first three parameters are the same seen before with <code>IAjaxCallListener</code> while jqEvent is an event internally fired by Wicket. The last parameter errorThrown indicates if an error has occurred during the AJAX call.<p class="paragraph"/>To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in <a href="../guide/single.html#jsintegration" class="guide">chapter 16</a>. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
 <ul class="star">
 <li>After been refreshed, the component loses every JavaScript handler set on it. This is not a problem for our datepicker as it sets a new JQuery datepicker every time is rendered (inside method renderHead).</li>
 <li>The markup previously created with JavaScript is not removed. For our datepicker this means that the icon used to open the calendar won't be removed while a new one will be added each time the component is refreshed.</li>
@@ -590,7 +591,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/bestpractices.html
===================================================================
--- guide/bestpractices.html	(revision 1675105)
+++ guide/bestpractices.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24 Wicket Best Practices - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -532,7 +532,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/componentLifecycle.html
===================================================================
--- guide/componentLifecycle.html	(revision 1675105)
+++ guide/componentLifecycle.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>7 Components lifecycle - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -305,7 +305,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/contributing.html
===================================================================
--- guide/contributing.html	(revision 1675105)
+++ guide/contributing.html	(working copy)
@@ -149,7 +149,7 @@
                 <div class="project">
                     <h1>29 Contributing to this guide (Appendix) - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -171,7 +171,7 @@
 <li>To preview your changes you should have <a href="http://grails.org/" target="blank">Grails</a> installed.</li>
 <ul class="star">
 <li>Download it from <a href="http://grails.org/download" target="blank">here</a>.</li>
-</ul></ul><p class="paragraph"/><strong class="bold">Note</strong>: Download version <strong class="bold">2.2.4</strong>. Newer versions are not supported at the moment.
+</ul></ul><p class="paragraph"/><strong class="bold">Note</strong>: Download version <strong class="bold">2.2.4</strong>. Newer versions are not supported at the moment. Grails 2.2.4 does <strong class="bold">not</strong> work with Java 8. Use Java 7 instead.
 <ul class="star">
 <ul class="star">
 <li>Install it by following these <a href="http://grails.org/doc/latest/guide/gettingStarted.html#requirements" target="blank">instructions</a></li>
@@ -185,6 +185,7 @@
 and attach it to a ticket in Apache Wicket's <a href="https://issues.apache.org/jira/browse/WICKET" target="blank">JIRA</a><p class="paragraph"/><strong class="bold">Thank you!</strong>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../guide/redirects.html">&lt;&lt; <strong>28</strong><span>Lost In Redirection With Apache Wicket (Appendix)</span></a></div>
@@ -209,7 +210,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/forms2.html
===================================================================
--- guide/forms2.html	(revision 1675105)
+++ guide/forms2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12 Wicket forms in detail - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -207,11 +207,12 @@
                 
 
 <h1 id="forms2">12 Wicket forms in detail</h1>
-In the previous chapter we have only scratched the surface of Wicket forms. The Form component was not only designed to collect user input but also to extend the semantic of the classic HTML forms with new features.<p class="paragraph"/>One of such features is the ability to work with nested forms (they will be discussed in paragraph 10.5).<p class="paragraph"/>In this chapter we will continue to explore Wicket forms learning how to master them and how to build effective and user-proof forms for our web applications.
+In the previous chapter we have only scratched the surface of Wicket forms. The Form component was not only designed to collect user input but also to extend the semantic of the classic HTML forms with new features.<p class="paragraph"/>One of such features is the ability to work with nested forms (they will be discussed in <a href="../guide/single.html#forms2_6" class="guide">paragraph 12.6</a>).<p class="paragraph"/>In this chapter we will continue to explore Wicket forms learning how to master them and how to build effective and user-proof forms for our web applications.
 
 
+
 <h2 id="forms2_1">12.1 Default form processing</h2>
-<p class="paragraph"/>In paragraph 9.3 we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
+<p class="paragraph"/>In <a href="../guide/single.html#modelsforms_3" class="guide">paragraph 11.3</a> we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
 <ol>
 <li>Form validation: user input is checked to see if it satisfies the validation rules set on the form. If validation fails, step number 2 is skipped and the form should display a feedback message to explain to user what went wrong. During this step input values (which are simple strings sent with a web request) are converted into Java objects. In the next paragraphs we will explore the infrastructures provided by Wicket for the three sub-tasks involved with form validation, which are: conversion of user input into objects, validation of user input, and visualization of feedback messages.</li>
 <li>Updating of models: if validation succeeds, the form updates the model of its children components with the converted values obtained in the previous step.</li>
@@ -218,15 +219,16 @@
 <li>Invoking callback methods onSubmit() or onError(): if we didn't have any validation error, method onSubmit() is called, otherwise onError() will be called. The default implementation of both these methods is left empty and we can override them to perform custom actions.</li>
 </ol><p class="paragraph"/><blockquote class="note">
 Please note that the model of form components is updated only if no validation error occurred (i.e. step two is performed only if validation succeeds). 
-</blockquote><p class="paragraph"/>Without going into too much detail, we can say that the first two steps of form processing correspond to the invocation of one or more Form's internal methods (which are declared protected and final). Some examples of these methods are validate(), which is invoked during validation step, and updateFormComponentModels(), which is used at the step that updates the form field models.<p class="paragraph"/>The whole form processing is started invoking public method process(IFormSubmitter) (Later in paragraph 10.4 we will introduce interface IFormSubmitter). 
+</blockquote><p class="paragraph"/>Without going into too much detail, we can say that the first two steps of form processing correspond to the invocation of one or more Form's internal methods (which are declared protected and final). Some examples of these methods are validate(), which is invoked during validation step, and updateFormComponentModels(), which is used at the step that updates the form field models.<p class="paragraph"/>The whole form processing is started invoking public method process(IFormSubmitter) (Later in <a href="../guide/single.html#forms2_5" class="guide">paragraph 12.5</a> we will introduce interface IFormSubmitter). 
 
 
+
 <h2 id="forms2_2">12.2 Form validation and feedback messages</h2>
-<p class="paragraph"/>A basic example of a validation rule is to make a field required. In paragraph 9.3.2 we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.<p class="paragraph"/>A validator is an implementation of the <code>org.apache.wicket.validation.IValidator</code> interface and the <code>FormComponent</code> has a version of method add which takes as input a reference of this interface.<p class="paragraph"/>For example if we want to use a text field to insert an email address, we could use the built-in validator  EmailAddressValidator to ensure that the inserted input will respect the email format <a href="http://en.wikipedia.org/wiki/Email_address" target="blank">local-part@domain</a> :<p class="paragraph"/><div class="code"><pre>TextField email = <span class="java&#45;keyword">new</span> TextField(<span class="java&#45;quote">"email"</span>);
-email.add(EmailAddressValidator.getInstance());</pre></div><p class="paragraph"/>Wicket comes with a set of built-in validators that should suit most of our needs. We will see them in paragraph 10.2.3.<p class="paragraph"/><h3>Feedback messages and localization</h3><p class="paragraph"/>Wicket generates a feedback message for each field that doesn't satisfy one of its validation rules. For example the message generated when a required field is left empty is the following<p class="paragraph"/><code>Field '&#60;label&#62;' is required.</code><p class="paragraph"/>&#60;label&#62; is the value of the label model set on a FormComponent with method setLabel(IModel &#60;String&#62; model). If such model is not provided, component id will be used as the default value.<p class="paragraph"/>The entire infrastructure of feedback messages is built on top of the Java internationalization (I18N) support and it uses <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html" target="blank">resource bundles</a> to store messages.<p class="paragraph"/><blockquote class="note">
-The topics of internationalization will be covered in chapter 12. For now we will give just few notions needed to understand the examples from this chapter.
-</blockquote><p class="paragraph"/>By default resource bundles are stored into properties files but we can easily configure other sources as described later in paragraph 12.4.5.<p class="paragraph"/>Default feedback messages (like the one above for required fields) are stored in the file Application. properties placed inside Wicket the org.apache.wicket package. Opening this file we can find the key and the localized value of the message:<p class="paragraph"/><code>Required=Field '$&#123;label&#125;' is required.</code><p class="paragraph"/>We can note the key (Required in our case) and the label parameter written in the <a href="http://en.wikipedia.org/wiki/Expression_Language" target="blank">expression language</a> (${label}). Scrolling down this file we can also find the message used by the Email AddressValidator:<p class="paragraph"/><code>EmailAddressValidator=The value of '${label}' is not a valid email address.</code><p class="paragraph"/>By default FormComponent provides 3 parameters for feedback message: input (the value that failed validation), label and name (this later is the id of the component).<p class="paragraph"/><blockquote class="warning">
-Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used in paragraph 10.2.5)
+<p class="paragraph"/>A basic example of a validation rule is to make a field required. In <a href="../guide/single.html#modelsforms_3" class="guide">paragraph 11.3</a> we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.<p class="paragraph"/>A validator is an implementation of the <code>org.apache.wicket.validation.IValidator</code> interface and the <code>FormComponent</code> has a version of method add which takes as input a reference of this interface.<p class="paragraph"/>For example if we want to use a text field to insert an email address, we could use the built-in validator  EmailAddressValidator to ensure that the inserted input will respect the email format <a href="http://en.wikipedia.org/wiki/Email_address" target="blank">local-part@domain</a> :<p class="paragraph"/><div class="code"><pre>TextField email = <span class="java&#45;keyword">new</span> TextField(<span class="java&#45;quote">"email"</span>);
+email.add(EmailAddressValidator.getInstance());</pre></div><p class="paragraph"/>Wicket comes with a set of built-in validators that should suit most of our needs. We will see them later in this chapter.<p class="paragraph"/><h3>Feedback messages and localization</h3><p class="paragraph"/>Wicket generates a feedback message for each field that doesn't satisfy one of its validation rules. For example the message generated when a required field is left empty is the following<p class="paragraph"/><code>Field '&#60;label&#62;' is required.</code><p class="paragraph"/>&#60;label&#62; is the value of the label model set on a FormComponent with method setLabel(IModel &#60;String&#62; model). If such model is not provided, component id will be used as the default value.<p class="paragraph"/>The entire infrastructure of feedback messages is built on top of the Java internationalization (I18N) support and it uses <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html" target="blank">resource bundles</a> to store messages.<p class="paragraph"/><blockquote class="note">
+The topics of internationalization will be covered in <a href="../guide/single.html#i18n" class="guide">chapter 14</a>. For now we will give just few notions needed to understand the examples from this chapter.
+</blockquote><p class="paragraph"/>By default resource bundles are stored into properties files but we can easily configure other sources as described later in <a href="../guide/single.html#i18n_2" class="guide">paragraph 14.2</a>.<p class="paragraph"/>Default feedback messages (like the one above for required fields) are stored in the file Application. properties placed inside Wicket the org.apache.wicket package. Opening this file we can find the key and the localized value of the message:<p class="paragraph"/><code>Required=Field '$&#123;label&#125;' is required.</code><p class="paragraph"/>We can note the key (Required in our case) and the label parameter written in the <a href="http://en.wikipedia.org/wiki/Expression_Language" target="blank">expression language</a> (${label}). Scrolling down this file we can also find the message used by the Email AddressValidator:<p class="paragraph"/><code>EmailAddressValidator=The value of '${label}' is not a valid email address.</code><p class="paragraph"/>By default FormComponent provides 3 parameters for feedback message: input (the value that failed validation), label and name (this later is the id of the component).<p class="paragraph"/><blockquote class="warning">
+Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used later in this chapter)
 </blockquote><p class="paragraph"/><h3>Displaying feedback messages and filtering them</h3><p class="paragraph"/>To display feedback messages we must use component <code>org.apache.wicket.markup.html.panel.FeedbackPanel</code>. This component automatically reads all the feedback messages generated during form validation and displays them with an unordered list:<p class="paragraph"/><div class="code"><pre>&#60;ul class=<span class="java&#45;quote">"feedbackPanel"</span>&#62; 
 	&#60;li class=<span class="java&#45;quote">"feedbackPanelERROR"</span>&#62; 
 		&#60;span class=<span class="java&#45;quote">"feedbackPanelERROR"</span>&#62;Field 'Username' is required.&#60;/span&#62; 
@@ -235,7 +237,7 @@
 <ul class="star">
 <li><strong class="bold">ComponentFeedbackMessageFilter</strong>: shows only messages coming from a specific component.</li>
 <li><strong class="bold">ContainerFeedbackMessageFilter</strong>: shows only messages coming from a specific container or from any of its children components.</li>
-<li><strong class="bold">ErrorLevelFeedbackMessageFilter</strong>: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed in paragraph 10.2.6.</li>
+<li><strong class="bold">ErrorLevelFeedbackMessageFilter</strong>: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed later in this chapter.</li>
 </ul><p class="paragraph"/>These filters are intended to be used when there are more than one feedback panel (or more than one form) in the same page. We can pass a filter to a feedback panel via its constructor or using the setFilter method. Custom filters can be created implementing the IFeedbackMessageFilter interface. An example of custom filter is illustrated later in this paragraph.<p class="paragraph"/><h3>Built-in validators</h3><p class="paragraph"/>Wicket already provides a number of built-in validators ready to be used. The following table is a short reference where validators are listed along with a brief description of what they do. The default feedback message used by each of them is reported as well:<p class="paragraph"/><h4>EmailAddressValidator</h4><p class="paragraph"/>Checks if input respects the format local-part&#64;domain.<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The value of '${label}' is not a valid email address.</code><p class="paragraph"/><h4>UrlValidator</h4><p class="paragraph"/>Checks if input is a valid URL. We can specify in the constructor which protocols are allowed (http://, https://, and ftp://).<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The value of '${label}' is not a valid URL.</code><p class="paragraph"/><h4>DateValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get date validators to check if a date is bigger than a lower bound (method minimum(Date min)), smaller than a upper bound (method maximum(Date max)) or inside a range (method range(Date min, Date max)).<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' is less than the minimum of ${minimum}.</code><p class="paragraph"/><code>The value of '${label}' is larger than the maximum of ${maximum}.</code><p class="paragraph"/><code>The value of '${label}' is not between ${minimum} and ${maximum}.</code><p class="paragraph"/><h4>RangeValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get validators to check if a value is bigger than a given lower bound (method minimum(T min)), smaller than a upper bound (method maximum(T max)) or inside a range (method range(T min,T max)).<p class="paragraph"/>The type of the value is a generic subtype of java.lang.Comparable and must implement Serializable interface.<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' must be at least ${minimum}.</code><p class="paragraph"/><code>The value of '${label}' must be at most ${maximum}.</code><p class="paragraph"/><code>The value of '${label}' must be between ${minimum} and ${maximum}.</code><p class="paragraph"/><h4>StringValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get validators to check if the length of a string value is bigger then a given lower bound (method minimumLength (int min)), smaller then a given upper bound (method maximumLength (int max)) or within a given range (method lengthBetween(int min, int max)).<p class="paragraph"/>To accept only string values consisting of exactly n characters, we must use method exactLength(int length).<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' is shorter than the minimum of ${minimum} characters.</code><p class="paragraph"/><code>The value of '${label}' is longer than the maximum of ${maximum} characters.</code><p class="paragraph"/><code>The value of '${label}' is not between ${minimum} and ${maximum} characters long.</code><p class="paragraph"/><code>The value of '${label}' is not exactly ${exact} characters long.</code><p class="paragraph"/><h4>CreditCardValidator</h4><p class="paragraph"/>Checks if input is a valid credit card number. This validator supports some of the most popular credit cards (like “American Express", "MasterCard", “Visa” or “Diners Club”).<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The credit card number is invalid.</code><p class="paragraph"/><h4>EqualPasswordInputValidator</h4><p class="paragraph"/>This validator checks if two password fields have the same value.<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>${label0} and ${label1} must be equal.</code><p class="paragraph"/><h3>Overriding standard feedback messages with custom bundles</h3><p class="paragraph"/>If we don't like the default validation feedback messages, we can override them providing custom properties files. In these files we can write our custom messages using the same keys of the messages we want to override. For example if we wanted to override the default message for invalid email addresses, our properties file would contain a line like this:<p class="paragraph"/><code>EmailAddressValidator=Man, your email address is not good!</code><p class="paragraph"/>As we will see in the next chapter, Wicket searches for custom properties files in various positions inside the application's class path, but for now we will consider just the properties file placed next to our application class. The name of this file must be equal to the name of our application class:<p class="paragraph"/><img border="0" class="center" src="../img/custom-properties-file.png"></img><p class="paragraph"/>The example project OverrideMailMessage overrides email validator's message with a new one which also reports the value that failed validation:<p class="paragraph"/><code>EmailAddressValidator=The value '${input}' inserted for field '${label}' is not a valid email address.</code><p class="paragraph"/><img border="0" class="center" src="../img/validation-error-message.png"></img><p class="paragraph"/><h3>Creating custom validators</h3><p class="paragraph"/>If our web application requires a complex validation logic and built-in validators are not enough, we can  implement our own custom validators. For example (project UsernameCustomValidator) suppose we are working on the registration page of our site where users can create their profile choosing their username. Our registration form should validate the new username checking if it was already chosen by another user. In a situation like this we may need to implement a custom validator that queries a specific data source to check if a username is already in use.<p class="paragraph"/>For the sake of simplicity, the validator of our example will check the given username against a fixed list of three existing usernames.<p class="paragraph"/>A custom validator must simply implement interface IValidator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class UsernameValidator <span class="java&#45;keyword">implements</span> IValidator&#60;<span class="java&#45;object">String</span>&#62; &#123;
 	List&#60;<span class="java&#45;object">String</span>&#62; existingUsernames = Arrays.asList(<span class="java&#45;quote">"bigJack"</span>, <span class="java&#45;quote">"anonymous"</span>, <span class="java&#45;quote">"mrSmith"</span>);<p class="paragraph"/>	<span class="java&#45;keyword">public</span> void validate(IValidatable&#60;<span class="java&#45;object">String</span>&#62; validatable) &#123;
 		<span class="java&#45;object">String</span> chosenUserName = validatable.getValue();<p class="paragraph"/>		<span class="java&#45;keyword">if</span>(existingUsernames.contains(chosenUserName))&#123;
@@ -325,7 +327,7 @@
 	<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> convertToString(Pattern value, Locale locale) &#123;
 		<span class="java&#45;keyword">return</span> value.toString();
 	&#125;
-&#125;</pre></div><p class="paragraph"/>Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in chapter 12.<p class="paragraph"/>Once we have implemented our custom converter, we must override method newConverterLocator() inside our application class and tell it to add our new converter to the default set:<p class="paragraph"/><div class="code"><pre>@Override
+&#125;</pre></div><p class="paragraph"/>Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in <a href="../guide/single.html#i18n" class="guide">paragraph 14</a>.<p class="paragraph"/>Once we have implemented our custom converter, we must override method newConverterLocator() inside our application class and tell it to add our new converter to the default set:<p class="paragraph"/><div class="code"><pre>@Override
 	<span class="java&#45;keyword">protected</span> IConverterLocator newConverterLocator() &#123;
 		ConverterLocator defaultLocator = <span class="java&#45;keyword">new</span> ConverterLocator();<p class="paragraph"/>		defaultLocator.set(Pattern.class, <span class="java&#45;keyword">new</span> RegExpPatternConverter());<p class="paragraph"/>		<span class="java&#45;keyword">return</span> defaultLocator;
 	&#125;</pre></div><p class="paragraph"/>Finally, in the home page of the project we build the form which displays (with a flash message) the tokens obtained splitting the string with the given pattern:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class HomePage <span class="java&#45;keyword">extends</span> WebPage &#123;
@@ -352,6 +354,7 @@
 </blockquote>
 
 
+
 <h2 id="forms2_4">12.4 Validation with JSR 303</h2>
 Standard JSR 303 defines a set of annotations and APIs to validate our domain objects at field-level. Wicket has introduced an experimental support for this standard since version 6.4.0 and with version 6.14.0 it has became an official Wicket model (named <code>wicket-bean-validation</code>).
 In this paragraph we will see the basic steps needed to use JSR 303 validation in our Wicket application. Code snippets are from example project <code>JSR303validation</code>.<p class="paragraph"/>In the example application we have a form to insert the data for a new <code>Person</code> bean and its relative <code>Address</code>. The code for class <code>Person</code> is the following<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class Person <span class="java&#45;keyword">implements</span> Serializable&#123;<p class="paragraph"/>	@NotNull
@@ -489,7 +492,7 @@
 
 
 <h2 id="forms2_9">12.9 Creating complex form components with FormComponentPanel</h2>
-<p class="paragraph"/>In chapter 3.2.2 we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.<p class="paragraph"/>While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow.<p class="paragraph"/>This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the <code>org.apache.wicket.markup.html.form.FormComponentPanel</code> component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent).<p class="paragraph"/>A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data.<p class="paragraph"/>To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).<p class="paragraph"/>The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the <a href="http://en.wikipedia.org/wiki/International_System_of_Units" target="blank">International System of Units</a> , so it makes perfect sense to store temperatures expressed with this unit of measurement.<p class="paragraph"/>However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user.<p class="paragraph"/>In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.<p class="paragraph"/>Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:<p class="paragraph"/><div class="code"><pre>&#60;html&#62;
+<p class="paragraph"/>In <a href="../guide/single.html#layout_2" class="guide">chapter 5.2.2</a> we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.<p class="paragraph"/>While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow.<p class="paragraph"/>This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the <code>org.apache.wicket.markup.html.form.FormComponentPanel</code> component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent).<p class="paragraph"/>A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data.<p class="paragraph"/>To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).<p class="paragraph"/>The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the <a href="http://en.wikipedia.org/wiki/International_System_of_Units" target="blank">International System of Units</a> , so it makes perfect sense to store temperatures expressed with this unit of measurement.<p class="paragraph"/>However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user.<p class="paragraph"/>In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.<p class="paragraph"/>Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:<p class="paragraph"/><div class="code"><pre>&#60;html&#62;
 &#60;head&#62;
 &#60;/head&#62;
 &#60;body&#62;
@@ -516,7 +519,7 @@
 		add(userDegree=<span class="java&#45;keyword">new</span> TextField&#60;<span class="java&#45;object">Double</span>&#62;(<span class="java&#45;quote">"registeredTemperature"</span>, <span class="java&#45;keyword">new</span> 
                            Model&#60;<span class="java&#45;object">Double</span>&#62;()));
 		userDegree.setType(<span class="java&#45;object">Double</span>.class);
-	&#125;</pre></div><p class="paragraph"/>Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in chapter 12). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius.<p class="paragraph"/>In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object.<p class="paragraph"/>Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:<p class="paragraph"/><div class="code"><pre>// continued example
+	&#125;</pre></div><p class="paragraph"/>Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in <a href="../guide/single.html#i18n" class="guide">paragraph 14</a>). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius.<p class="paragraph"/>In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object.<p class="paragraph"/>Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:<p class="paragraph"/><div class="code"><pre>// continued example
 	@Override
 	<span class="java&#45;keyword">protected</span> void convertInput() &#123;
 		<span class="java&#45;object">Double</span> userDegreeVal = userDegree.getConvertedInput();
@@ -541,8 +544,9 @@
 &#125;</pre></div><p class="paragraph"/>Since our component does not directly receive the user input, convertInput() must read this value from the inner text field using FormComponent's getConvertedInput() method which returns the input value already converted to the type specified for the component (Double in our case). Once we have the user input we convert it to kelvin degrees and we use the resulting value to set the converted input for our custom component (using method setConvertedInput(T convertedInput)).<p class="paragraph"/>Method onBeforeRender() is responsible for synchronizing the model of the inner textfield with the model of our custom component. To do this we retrieve the model object of the custom component with the getDefaultModelObject() method, then we convert it to the temperature scale adopted by the user and finally we use this value to set the model object of the text field.
 
 
+
 <h2 id="forms2_10">12.10 Stateless form</h2>
-<p class="paragraph"/>In chapter 6 we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).<p class="paragraph"/>Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page.<p class="paragraph"/>For this kind of page we might encounter two potential problems if we chose to use a stateful page. The first problem occurs when the user tries to login without a valid session assigned to him. This could happen if the user leaves the login page opened for a period of time bigger than the session's timeout and then he decides to log in. Under these conditions the user will be redirected to a 'Page expired' error page, which is not exactly a nice thing for user experience.<p class="paragraph"/>The second problem occurs when a malicious user or a web crawler program attempts to login into our web application, generating a huge number of page versions and consequently increasing the size of the user session.<p class="paragraph"/>To avoid these kinds of problems we should build a stateless login page which does not depend on a user session. Wicket provides a special version of the Form component called StatelessForm which is stateless by default (i.e its method getStatelessHint() returns true), hence it's an ideal solution when we want to build a stateless page with a form. A possible implementation of our login form is the following (example project StatelessLoginForm):<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;html&#62;
+<p class="paragraph"/>In <a href="../guide/single.html#versioningCaching" class="guide">chapter 8</a> we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).<p class="paragraph"/>Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page.<p class="paragraph"/>For this kind of page we might encounter two potential problems if we chose to use a stateful page. The first problem occurs when the user tries to login without a valid session assigned to him. This could happen if the user leaves the login page opened for a period of time bigger than the session's timeout and then he decides to log in. Under these conditions the user will be redirected to a 'Page expired' error page, which is not exactly a nice thing for user experience.<p class="paragraph"/>The second problem occurs when a malicious user or a web crawler program attempts to login into our web application, generating a huge number of page versions and consequently increasing the size of the user session.<p class="paragraph"/>To avoid these kinds of problems we should build a stateless login page which does not depend on a user session. Wicket provides a special version of the Form component called StatelessForm which is stateless by default (i.e its method getStatelessHint() returns true), hence it's an ideal solution when we want to build a stateless page with a form. A possible implementation of our login form is the following (example project StatelessLoginForm):<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;html&#62;
    &#60;head&#62;
       &#60;meta charset=<span class="java&#45;quote">"utf&#45;8"</span> /&#62;
    &#60;/head&#62;
@@ -586,8 +590,9 @@
 &#125;</pre></div><p class="paragraph"/>Label sessionType shows if current session is temporary or not and is set inside onBeforeRender(): if our page is really stateless the session will be always temporary. We have also inserted a feedback panel in the home page that shows if the credentials are correct. This was done to make the example form more interactive.
 
 
+
 <h2 id="forms2_11">12.11 Working with radio buttons and checkboxes</h2>
-<p class="paragraph"/>In this paragraph we will see which components can be used to handle HTML radio buttons and checkboxes. Both these input elements are usually grouped together to display a list of possible choices:<p class="paragraph"/><img border="0" class="center" src="../img/choice-form-screenshot.png"></img><p class="paragraph"/>A check box can be used as single component to set a boolean property. For this purpose Wicket provides the <code>org.apache.wicket.markup.html.form.CheckBox</code> component which must be attached to &#60;input type="checkbox".../&#62; tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in paragraph 9.5 to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RegistrationInfo <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
+<p class="paragraph"/>In this paragraph we will see which components can be used to handle HTML radio buttons and checkboxes. Both these input elements are usually grouped together to display a list of possible choices:<p class="paragraph"/><img border="0" class="center" src="../img/choice-form-screenshot.png"></img><p class="paragraph"/>A check box can be used as single component to set a boolean property. For this purpose Wicket provides the <code>org.apache.wicket.markup.html.form.CheckBox</code> component which must be attached to &#60;input type="checkbox".../&#62; tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in <a href="../guide/single.html#modelsforms_5" class="guide">paragraph 11.5</a> to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RegistrationInfo <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> surname;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> address;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> email;
@@ -638,7 +643,7 @@
 		&#60;input type=<span class="java&#45;quote">"checkbox"</span>/&#62;It will be replaced by the actual checkboxes&#8230;
 &#60;/div&#62;</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre>List&#60;<span class="java&#45;object">String</span>&#62; fruits = Arrays.asList(<span class="java&#45;quote">"apple"</span>, <span class="java&#45;quote">"strawberry"</span>, <span class="java&#45;quote">"watermelon"</span>); 
 form.add(<span class="java&#45;keyword">new</span> CheckBoxMultipleChoice(<span class="java&#45;quote">"checkGroup"</span>, <span class="java&#45;keyword">new</span> ListModel&#60;<span class="java&#45;object">String</span>&#62;(<span class="java&#45;keyword">new</span>  
-								 ArrayList&#60;<span class="java&#45;object">String</span>&#62;()), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-checkbox.png"></img><p class="paragraph"/>This component can be attached to a &#60;div&#62; tag or to a &#60;span&#62; tag. No specific content is required for this tag as it will be populated with the actual checkboxes. Since this component allows multiple selection, its model object is a list. In the example above we have used model class <code>org.apache.wicket.model.util.ListModel</code> which is specifically designed to wrap a List object.<p class="paragraph"/>By default CheckBoxMultipleChoice inserts a &#60;br/&#62; tag as suffix after each option. We can configure both the suffix and the prefix used by the component with the setPrefix and setSuffix methods.<p class="paragraph"/>When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in paragraph 9.4:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;div wicket:id=<span class="java&#45;quote">"checkGroup"</span>&#62;
+								 ArrayList&#60;<span class="java&#45;object">String</span>&#62;()), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-checkbox.png"></img><p class="paragraph"/>This component can be attached to a &#60;div&#62; tag or to a &#60;span&#62; tag. No specific content is required for this tag as it will be populated with the actual checkboxes. Since this component allows multiple selection, its model object is a list. In the example above we have used model class <code>org.apache.wicket.model.util.ListModel</code> which is specifically designed to wrap a List object.<p class="paragraph"/>By default CheckBoxMultipleChoice inserts a &#60;br/&#62; tag as suffix after each option. We can configure both the suffix and the prefix used by the component with the setPrefix and setSuffix methods.<p class="paragraph"/>When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in <a href="../guide/single.html#modelsforms_5" class="guide">paragraph 11.5</a>:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;div wicket:id=<span class="java&#45;quote">"checkGroup"</span>&#62;
 		&#60;input type=<span class="java&#45;quote">"checkbox"</span>/&#62;It will be replaced by actual checkboxes&#8230;
 &#60;/div&#62;</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre>Person john = <span class="java&#45;keyword">new</span> Person(<span class="java&#45;quote">"John"</span>, <span class="java&#45;quote">"Smith"</span>);
 Person bob = <span class="java&#45;keyword">new</span> Person(<span class="java&#45;quote">"Bob"</span>, <span class="java&#45;quote">"Smith"</span>);
@@ -656,6 +661,7 @@
 form.add(<span class="java&#45;keyword">new</span> RadioChoice(<span class="java&#45;quote">"radioGroup"</span>, Model.of(<span class="java&#45;quote">""</span>), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-radiobutton.png"></img><p class="paragraph"/>Just like CheckBoxMultipleChoice, this component provides the setPrefix and setSuffix methods to configure the prefix and suffix for our options and it supports IChoiceRender as well. In addition, RadioChoice provides the wantOnSelectionChangedNotifications() method to notify the web server when the selected option changes (this is the same method seen for DropDownChoice in paragraph 9.4).
 
 
+
 <h2 id="forms2_12">12.12 Selecting multiple values with ListMultipleChoices and Palette</h2>
 <p class="paragraph"/>Checkboxes work well when we have a small amount of options to display, but they quickly become chaotic as the number of options increases. To overcome this limit we can use the &#60;select&#62; tag switching it to multiple-choice mode with attribute multiple="multiple":<p class="paragraph"/><img border="0" class="center" src="../img/list-multiple-choices.png"></img><p class="paragraph"/>Now the user can select multiple options by holding down Ctrl key (or Command key for Mac) and selecting them.<p class="paragraph"/>To work with multiple choice list Wicket provides the <code>org.apache.wicket.markup.html.form.ListMultipleChoice</code> component:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;select wicket:id=<span class="java&#45;quote">"fruits"</span>&#62;
 	&#60;option&#62;choice 1&#60;/option&#62;
@@ -731,7 +737,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/grails-app/conf/Config.groovy
===================================================================
--- guide/grails-app/conf/Config.groovy	(revision 1675105)
+++ guide/grails-app/conf/Config.groovy	(working copy)
@@ -94,7 +94,7 @@
 
 grails.doc.title = "Apache Wicket User Guide"
 grails.doc.subtitle = "Free Online Guide for Apache Wicket framework"
-grails.doc.authors = "Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko"
+grails.doc.authors = "Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde"
 grails.doc.images = new File("src/docs/img")
 grails.doc.css = new File("src/docs/css")
 grails.doc.logo = """<a href="/" target="_blank"><img height="80px" src="http://wicket.apache.org/guide/img/apache-wicket.png"/></a>"""
Index: guide/helloWorld.html
===================================================================
--- guide/helloWorld.html	(revision 1675105)
+++ guide/helloWorld.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>4 Wicket says &ldquo;Hello world!&rdquo; - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -328,7 +328,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/howToSource.html
===================================================================
--- guide/howToSource.html	(revision 1675105)
+++ guide/howToSource.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>2 How to use the example code - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/i18n.html
===================================================================
--- guide/i18n.html	(revision 1675105)
+++ guide/i18n.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>14 Internationalization with Wicket - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -186,11 +186,12 @@
                 
 
 <h1 id="i18n">14 Internationalization with Wicket</h1>
-In chapter 10 we have seen how the topic of localization is involved in the generation of feedback messages and we had a first contact with resource bundles. In this chapter we will continue to explore the localization support provided by Wicket and we will learn how to build pages and components ready to be localized in different languages.
+In <a href="../guide/single.html#forms2_2" class="guide">chapter 12.2</a> we have seen how the topic of localization is involved in the generation of feedback messages and we had a first contact with resource bundles. In this chapter we will continue to explore the localization support provided by Wicket and we will learn how to build pages and components ready to be localized in different languages.
 
 
+
 <h2 id="i18n_1">14.1 Localization</h2>
-<p class="paragraph"/>As we have seen in chapter 10, the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the &#60;ApplicationClassName&#62;.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.<p class="paragraph"/><blockquote class="note">
+<p class="paragraph"/>As we have seen in <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a>, the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the &#60;ApplicationClassName&#62;.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.<p class="paragraph"/><blockquote class="note">
 Providing a full description of Java support for i18n is clearly out of the scope of this document. If you need more informations about this topic you can find them in the JavaDocs and in the official <a href="http://docs.oracle.com/javase/tutorial/i18n/index.html" target="blank">i18n tutorial</a> .
 </blockquote><p class="paragraph"/><h3>Class Locale and ResourceBundle</h3><p class="paragraph"/>Class java.util.Locale represents a specific country or language of the world and is used in Java to retrieve other locale-dependent informations like numeric and date formats, the currency in use in a country and so on. Such kind of informations are accessed through special entities called resource bundles which are implemented by class <code>java.util.ResourceBundle</code>. Every resource bundle is identified by a full name which is built using four parameters: a base name (which is required), a language code, a country code and a variant (which are all optional). These three optional parameters are provided by an instance of Locale with its three corresponding getter methods: getLanguage(), getCountry() and getVariant(). Parameter language code is a lowercase ISO 639 2-letter code (like zh for Chinese, de for German and so on) while country code is an uppercase ISO 3166 2-letter code (like CN for China, DE for Germany and so on). The final full name will have the following structure (NOTE: tokens inside squared brackets are optional):<p class="paragraph"/><div class="code"><pre>&#60;base name&#62;&#91; <em class="italic">&#60;language code&#62;&#91;</em> &#60;COUNTRY_CODE&#62;&#91;_&#60;variant code&#62;&#93;&#93;&#93;</pre></div><p class="paragraph"/>For example a bundle with MyBundle as base name and localized for Mandarin Chinese (language code zh, country code CH, variant cmn) will have MyBundle_zh_CH_cmn as full name. A base name can be a fully qualified class name, meaning that it can include a package name before the actual base name. The specified package will be the container of the given bundle. For example if we use org.foo.MyBundle as base name, the bundle named MyBundle will be searched inside package org.foo. The actual base name (MyBundle in our example) will be used to build the full name of the bundle following the same rules seen above.
 <code>ResourceBundle</code> is an abstract factory class, hence it exposes a number of factory methods named  getBundle to load a concrete bundle. Without going into too much details we can say that a bundle corresponds to a file in the classpath. To find a file for a given bundle, getBundle needs first to generate an ordered list of candidate bundle names. These names are the set of all possible full names for a given bundle. For example if we have org.foo.MyBundle as base name and the current locale is the one seen before for Mandarin Chinese, the candidate names will be:
@@ -199,9 +200,10 @@
 <li>org.foo.MyBundle_zh_CH</li>
 <li>org.foo.MyBundle_zh</li>
 <li>org.foo.MyBundle</li>
-</ol><p class="paragraph"/>The list of these candidate names is generated starting from the most specific one and subtracting an optional parameter at each step. The last name of the list corresponds to the default resource bundle which is the most general name and is equal to the base name. Once that getBundle has generated the list of candidate names, it will iterate over them to find the first one for which is possible to load a class or a properties file. The class must be a subclass of <code>ResourceBundle</code> having as class name the full name used in the current iteration. If such a class is not found, getBundle will try to locate a properties file having a file name equals to the current full name (Java will automatically append extension .properties to the full name). For example given the resource bundle of the previous example, Java will search first for class org.foo.MyBundle_zh_CH_cmn and then for file MyBundle_zh_CH_cmn.properties inside package org.foo. If no file is found for any of the candidate names, a MissingResourceException will be thrown. Bundles contains local-dependent string resources identified by a key that is unique in the given bundle. So once we have obtained a valid bundle we can access these objects with method getString (String key).<p class="paragraph"/>As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In chapter 10 we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In paragraph 12.4 we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
+</ol><p class="paragraph"/>The list of these candidate names is generated starting from the most specific one and subtracting an optional parameter at each step. The last name of the list corresponds to the default resource bundle which is the most general name and is equal to the base name. Once that getBundle has generated the list of candidate names, it will iterate over them to find the first one for which is possible to load a class or a properties file. The class must be a subclass of <code>ResourceBundle</code> having as class name the full name used in the current iteration. If such a class is not found, getBundle will try to locate a properties file having a file name equals to the current full name (Java will automatically append extension .properties to the full name). For example given the resource bundle of the previous example, Java will search first for class org.foo.MyBundle_zh_CH_cmn and then for file MyBundle_zh_CH_cmn.properties inside package org.foo. If no file is found for any of the candidate names, a MissingResourceException will be thrown. Bundles contains local-dependent string resources identified by a key that is unique in the given bundle. So once we have obtained a valid bundle we can access these objects with method getString (String key).<p class="paragraph"/>As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a> we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a> we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
 
 
+
 <h2 id="i18n_2">14.2 Localization in Wicket</h2>
 <p class="paragraph"/>A component can get the current locale in use calling its method getLocale(). By default this method will be recursively called on component's parent containers until one of them returns a valid locale. If no one of them returns a locale, this method will get the one associated with the current user session. This locale is automatically generated by Wicket in accordance with the language settings of the browser.<p class="paragraph"/>Developers can change the locale of the current session with Session's method setLocale (Locale locale):<p class="paragraph"/><div class="code"><pre>Session.get().setLocale(locale)</pre></div><p class="paragraph"/><h3>Style and variation parameters for bundles</h3><p class="paragraph"/>In addition to locale's informations, Wicket supports two further parameters to identify a resource bundle: style and variation. Parameter style is a string value and is defined at session-level. To set/get the style for the current session we can use the corresponding setter and getter of class Session:<p class="paragraph"/><div class="code"><pre>Session.get().setStyle(<span class="java&#45;quote">"myStyle"</span>);
 Session.get().getStyle();</pre></div><p class="paragraph"/>If set, style's value contributes to the final full name of the bundle and it is placed between the base name and the locale's informations:<p class="paragraph"/><div class="code"><pre>&#60;base name&#62;&#91; <em class="italic">style&#93;&#91;</em> &#60;language code&#62;&#91; <em class="italic">&#60;COUNTRY_CODE&#62;&#91;</em> &#60;variant code&#62;&#93;&#93;&#93;</pre></div><p class="paragraph"/>Wicket gives the priority to candidate names containing the style information (if available). The other parameter we can use for localization is variation. Just like style also variation is a string value, but it is defined at component-level. The value of variation is returned by Component's method getVariation(). By default this method returns the variation of the parent component or a null value if a component hasn't a parent (i.e. it's a page). If we want to customize this parameter we must overwrite method  getVariation and make it return the desired value.<p class="paragraph"/>Variation's value contributes to the final full name of the bundle and is placed before style parameter:<p class="paragraph"/><div class="code"><pre>&#60;base name&#62;&#91; <em class="italic">variation&#93;&#91;_style&#93;&#91;</em> &#60;language code&#62;&#91; <em class="italic">&#60;COUNTRY_CODE&#62;&#91;</em> &#60;variant code&#62;&#93;&#93;&#93;</pre></div><p class="paragraph"/>
@@ -213,12 +215,12 @@
 &#60;!DOCTYPE properties SYSTEM <span class="xml&#45;quote">"http://www.oracle.com/webfolder/technetwork/jsc/dtd/properties.dtd"</span>&#62;
 <span class="xml&#45;tag">&#60;properties&#62;</span>
 	<span class="xml&#45;tag">&#60;entry key=<span class="xml&#45;quote">"greetingMessage"</span>&#62;</span>欢迎光临本网站！<span class="xml&#45;tag">&#60;/entry&#62;</span>
-<span class="xml&#45;tag">&#60;/properties&#62;</span></pre></div><p class="paragraph"/>To use XML bundles in Wicket we don't need to put in place any additional configuration. The only rule we have to respect with these files is to use properties.xml as extension while their base name follows the same rules seen so far for bundle names.<p class="paragraph"/><h3>Reading bundles from code</h3><p class="paragraph"/>Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in paragraph 12.4. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:<p class="paragraph"/><div class="code"><pre>getString(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/><h3>Localization of bundles in Wicket</h3><p class="paragraph"/>In chapter 10 we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:<p class="paragraph"/><div class="code"><pre>greetingMessage=Welcome to the site!</pre></div><p class="paragraph"/>Along with this file we can also find a bundle for German (WicketApplication_de.properties) and another one in XML format for simplified Chinese (WicketApplication_zh.properties.xml). The example project consists of a single page (HomePage.java) displaying the greeting message. The current locale can be changed with a drop-down list and the possible options are English (the default one), German and simplified Chinese:<p class="paragraph"/><img border="0" class="center" src="../img/locale-german.png"></img><p class="paragraph"/>The label displaying the greeting message has a custom read-only model which returns the message with method getString. The initialization code for this label is this:<p class="paragraph"/><div class="code"><pre>AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62; model = <span class="java&#45;keyword">new</span> AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62;() &#123;			
+<span class="xml&#45;tag">&#60;/properties&#62;</span></pre></div><p class="paragraph"/>To use XML bundles in Wicket we don't need to put in place any additional configuration. The only rule we have to respect with these files is to use properties.xml as extension while their base name follows the same rules seen so far for bundle names.<p class="paragraph"/><h3>Reading bundles from code</h3><p class="paragraph"/>Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a>. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:<p class="paragraph"/><div class="code"><pre>getString(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/><h3>Localization of bundles in Wicket</h3><p class="paragraph"/>In <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a> we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:<p class="paragraph"/><div class="code"><pre>greetingMessage=Welcome to the site!</pre></div><p class="paragraph"/>Along with this file we can also find a bundle for German (WicketApplication_de.properties) and another one in XML format for simplified Chinese (WicketApplication_zh.properties.xml). The example project consists of a single page (HomePage.java) displaying the greeting message. The current locale can be changed with a drop-down list and the possible options are English (the default one), German and simplified Chinese:<p class="paragraph"/><img border="0" class="center" src="../img/locale-german.png"></img><p class="paragraph"/>The label displaying the greeting message has a custom read-only model which returns the message with method getString. The initialization code for this label is this:<p class="paragraph"/><div class="code"><pre>AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62; model = <span class="java&#45;keyword">new</span> AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62;() &#123;			
 			@Override
 			<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> getObject() &#123;
 				<span class="java&#45;keyword">return</span> getString(<span class="java&#45;quote">"greetingMessage"</span>);			
 			&#125;
-&#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"greetingMessage"</span>, model));</pre></div><p class="paragraph"/>Class <code>org.apache.wicket.model.AbstractReadOnlyModel</code> is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph 12.6.<p class="paragraph"/>The rest of the code of the home page builds the stateless form and the drop-down menu used to change the locale.<p class="paragraph"/><div class="code"><pre>List&#60;Locale&#62; locales = Arrays.asList(Locale.ENGLISH, Locale.CHINESE, Locale.GERMAN);
+&#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"greetingMessage"</span>, model));</pre></div><p class="paragraph"/>Class <code>org.apache.wicket.model.AbstractReadOnlyModel</code> is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph <a href="../guide/single.html#i18n_5" class="guide">paragraph 14.5</a>.<p class="paragraph"/>The rest of the code of the home page builds the stateless form and the drop-down menu used to change the locale.<p class="paragraph"/><div class="code"><pre>List&#60;Locale&#62; locales = Arrays.asList(Locale.ENGLISH, Locale.CHINESE, Locale.GERMAN);
 <span class="java&#45;keyword">final</span> DropDownChoice&#60;Locale&#62; changeLocale = 
              <span class="java&#45;keyword">new</span> DropDownChoice&#60;Locale&#62;(<span class="java&#45;quote">"changeLocale"</span>, <span class="java&#45;keyword">new</span> Model&#60;Locale&#62;(), locales);<p class="paragraph"/>StatelessForm form = <span class="java&#45;keyword">new</span> StatelessForm(<span class="java&#45;quote">"form"</span>)&#123;
 	@Override
@@ -239,13 +241,13 @@
 form.add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"anotherLabel"</span>,<span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"labelValue"</span>)));
 add(form);</pre></div><p class="paragraph"/>Page bundle:<p class="paragraph"/><div class="code"><pre>labelValue=Default value
 anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel
-form.anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel inside form</pre></div><p class="paragraph"/>With the code and the bundle above, the label inside the form will display the value 'Value for anotherLabel inside form'.<p class="paragraph"/><h3>Package bundles</h3><p class="paragraph"/>If no one of the previous steps can find a resource for the given key, the algorithm will look for package bundles. These bundles have <code>wicket-package</code> as base name and they can be placed in one of the package of our application:<p class="paragraph"/><img border="0" class="center" src="../img/package-bundles.png"></img><p class="paragraph"/>Packages are traversed starting from the one containing the component requesting for a resource and going up to the root package.<p class="paragraph"/><h3>Bundles for feedback messages</h3><p class="paragraph"/>The algorithm described so far applies to feedback messages as well. In case of validation errors, the component that has caused the error will be considered as the component which the string resource is relative to. Furthermore, just like application class and components, validators can have their own bundles placed next to their class and having as base name their class name. This allows us to distribute validators along with the messages they use to report errors:<p class="paragraph"/><img border="0" class="center" src="../img/validator-with-bundle.png"></img><p class="paragraph"/>Validator's resource bundles have the lowest priority in the lookup algorithm. They can be overwritten by resource bundles of components, packages and application class.<p class="paragraph"/><h3>Extending the default lookup algorithm</h3><p class="paragraph"/>Wicket implements the default lookup algorithm using the strategy pattern1. The concrete strategies are abstracted with the interface <code>org.apache.wicket.resource.loader.IStringResourceLoader</code>. By default Wicket uses the following implementations of <code>IStringResourceLoader</code> (sorted by execution order):
+form.anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel inside form</pre></div><p class="paragraph"/>With the code and the bundle above, the label inside the form will display the value 'Value for anotherLabel inside form'.<p class="paragraph"/><h3>Package bundles</h3><p class="paragraph"/>If no one of the previous steps can find a resource for the given key, the algorithm will look for package bundles. These bundles have <code>wicket-package</code> as base name and they can be placed in one of the package of our application:<p class="paragraph"/><img border="0" class="center" src="../img/package-bundles.png"></img><p class="paragraph"/>Packages are traversed starting from the one containing the component requesting for a resource and going up to the root package.<p class="paragraph"/><h3>Bundles for feedback messages</h3><p class="paragraph"/>The algorithm described so far applies to feedback messages as well. In case of validation errors, the component that has caused the error will be considered as the component which the string resource is relative to. Furthermore, just like application class and components, validators can have their own bundles placed next to their class and having as base name their class name. This allows us to distribute validators along with the messages they use to report errors:<p class="paragraph"/><img border="0" class="center" src="../img/validator-with-bundle.png"></img><p class="paragraph"/>Validator's resource bundles have the lowest priority in the lookup algorithm. They can be overwritten by resource bundles of components, packages and application class.<p class="paragraph"/><h3>Extending the default lookup algorithm</h3><p class="paragraph"/>Wicket implements the default lookup algorithm using the strategy pattern. The concrete strategies are abstracted with the interface <code>org.apache.wicket.resource.loader.IStringResourceLoader</code>. By default Wicket uses the following implementations of <code>IStringResourceLoader</code> (sorted by execution order):
 <ol>
 <li><strong class="bold">ComponentStringResourceLoader:</strong> implements most of the default algorithm. It searches for a given resource across bundles from the container hierarchy, from class hierarchy and from the given component.</li>
 <li><strong class="bold">PackageStringResourceLoader:</strong> searches into package bundles.</li>
 <li><strong class="bold">ClassStringResourceLoader:</strong> searches into bundles of a given class. By default the target class is the application class.</li>
 <li><strong class="bold">ValidatorStringResourceLoader:</strong> searches for resources into validator's bundles. A list of validators is provided by the form component that failed validation.</li>
-<li><strong class="bold">InitializerStringResourceLoader:</strong> this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in paragraph 15.4.</li>
+<li><strong class="bold">InitializerStringResourceLoader:</strong> this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in <a href="../guide/single.html#advanced_3" class="guide">paragraph 17.3</a>.</li>
 </ol><p class="paragraph"/>Developer can customize lookup algorithm removing default resource loaders or adding custom implementations to the list of the resource loaders in use. This task can be accomplished using method getStringResourceLoaders of setting interface <code>org.apache.wicket.settings.IResourceSettings</code>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
@@ -278,8 +280,8 @@
 green=Green
 red=Red
 blue=Blue
-yellow=Yellow</pre></div><p class="paragraph"/>German bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Wahlen sie eine farbe
-green=Grun
+yellow=Yellow</pre></div><p class="paragraph"/>German bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Wählen Sie eine Farbe
+green=Grün
 red=Rot
 blue=Blau
 yellow=Gelb</pre></div><p class="paragraph"/>Italian bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Scegli un colore
@@ -286,11 +288,12 @@
 green=Verde
 red=Rosso
 blue=Blu
-yellow=Giallo</pre></div><p class="paragraph"/>Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Chose one ”) used for null value. The resource key for this resource is 'null' or '&#60;component id&#62;.null' if we want to make it component-specific.
+yellow=Giallo</pre></div><p class="paragraph"/>Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Select a color ”) used for null value. The resource key for this resource is 'null' or '&#60;component id&#62;.null' if we want to make it component-specific.
 
 
+
 <h2 id="i18n_5">14.5 Internationalization and Models</h2>
-<p class="paragraph"/>Internationalization is another good chance to taste the power of models. Wicket provides two built-in models to better integrate our components with string resources: they are ResourceModel and StringResourceModel.<p class="paragraph"/><h3>ResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.ResourceModel</code> acts just like the read-only model we have implemented in paragraph 12.3.4. It simply retrieves a string resource corresponding to a given key:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel <span class="java&#45;keyword">for</span> key 'greetingMessage'
+<p class="paragraph"/>Internationalization is another good chance to taste the power of models. Wicket provides two built-in models to better integrate our components with string resources: they are ResourceModel and StringResourceModel.<p class="paragraph"/><h3>ResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.ResourceModel</code> acts just like the read-only model we have implemented in <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a>. It simply retrieves a string resource corresponding to a given key:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel <span class="java&#45;keyword">for</span> key 'greetingMessage'
 <span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/>We can also specify a default value to use if the requested resource is not found:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel with a <span class="java&#45;keyword">default</span> value
 <span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"notExistingResource"</span>, <span class="java&#45;quote">"Resource not found."</span>);</pre></div><p class="paragraph"/><h3>StringResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.StringResourceModel</code> allows to work with complex and dynamic string resources containing parameters and property expressions. The basic constructor of this model takes in input a resource key and another model. This further model can be used by both the key and the related resource to specify dynamic values with property expressions. For example let's say that we are working on an e-commerce site which has a page where users can see an overview of their orders. To handle the state of user's orders we will use the following bean and enum (the code is from project StringResourceModelExample):<p class="paragraph"/>Bean:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class Order <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> Date orderDate;
 	<span class="java&#45;keyword">private</span> ORDER_STATUS status;<p class="paragraph"/>	<span class="java&#45;keyword">public</span> Order(Date orderDate, ORDER_STATUS status) &#123;
@@ -313,6 +316,7 @@
 StringResourceModel srm = <span class="java&#45;keyword">new</span> StringResourceModel(<span class="java&#45;quote">"orderStatus.delay"</span>, <span class="java&#45;keyword">null</span>, propertyModel, 3);</pre></div><p class="paragraph"/>Bundle:<p class="paragraph"/><div class="code"><pre>orderStatus.delay=Your order submitted on $&#123;0&#125; has been delayed by &#123;1&#125; days.</pre></div><p class="paragraph"/>One further parameter we can specify when we build a StringResourceModel is the component that must be used by the lookup algorithm. Normally this parameter is not relevant, but if we need to use a particular bundle owned by a component not considered by the algorithm, we can specify this component as second parameter. If we pass all possible parameters to StringResourceModel's constructor we obtain something like this:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">new</span> StringResourceModel(<span class="java&#45;quote">"myKey"</span>, myComponent, myModel, param1, param2, param3,...);</pre></div>
 
 
+
 <h2 id="i18n_6">14.6 Summary</h2>
 <p class="paragraph"/>Internationalization is a mandatory step if we want to take our applications (and our business!) abroad. Choosing the right strategy to manage our localized resources is fundamental to avoid to make a mess of them. In this chapter we have explored the built-in support for localization provided by Wicket, and we have learnt which solutions it offers to manage resource bundles. In the final part of the chapter we have seen how to localize the options displayed by a component (such as DropDownChoice or RadioChoice) and we also introduced two new models specifically designed to localize our components without introducing in their code any detail about internationalization.
 
@@ -344,7 +348,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/index.html
===================================================================
--- guide/index.html	(revision 1675105)
+++ guide/index.html	(working copy)
@@ -111,7 +111,7 @@
 
                         <div class="project">
                             <h1>Apache Wicket User Guide - Reference Documentation</h1>
-                            <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                            <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
                             <p><strong>Version:</strong> 6.x</p>
                             
                         </div>
@@ -525,7 +525,7 @@
         <div id="footer">
             
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
             
         </div>
Index: guide/internals.html
===================================================================
--- guide/internals.html	(revision 1675105)
+++ guide/internals.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>25 Wicket Internals - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -186,7 +186,8 @@
    data : <span class="java&#45;object">byte</span>&#91;&#93;
 &#125;</pre></div><p class="paragraph"/>i.e. this is the serialized page instance (data) plus additional information needed to be able to easily find it later (sessionId, pageId).<p class="paragraph"/>When a <code>SerializedPage</code> has to be stored <code>DefaultPageStore</code> stores it in a application scoped cache ({sessionId, pageId} -&#62; SerializedPage) and additionally gives it to the underlying <code>IDataStore#storeData(sessionId, pageId, data)</code>. The application scoped cache is used as second level cache. Getting a page from it is slower than the http session based cache in <code>PageStoreManager</code> because the page has to be deserialized, but is faster than the underlying <code>IDataStore</code> which stores the page bytes in some persistent store.<p class="paragraph"/>The size of the application scoped cache is configurable via <code>org.apache.wicket.settings.IStoreSettings.setInmemoryCacheSize(int)</code>.<p class="paragraph"/><h3>IDataStore</h3><p class="paragraph"/><code>org.apache.wicket.pageStore.IDataStore</code> is used to persist Wicket pages (as bytes) to a persistent store like e.g. files or databases. The default implementation is <code>org.apache.wicket.pageStore.DiskDataStore</code> which as its name says stores the pages in files. The location of the folder where the files are stored is configurable via <code>org.apache.wicket.settings.IStoreSettings.setFileStoreFolder(File)</code>, by default the web container's work folder is used (ServletContext attribute 'javax.servlet.context.tempdir'). In this folder a sub-folder is created named <code>'applicationName-filestore'</code>. 
 This folder contains a sub-folder for each active http session. This session folder contains a single file named 'data' which contains the bytes for the pages. The size of this 'data' file is configurable via <code>org.apache.wicket.settings.IStoreSettings.setMaxSizePerSession(Bytes)</code>. When this size is exceeded the newly stored files overwrite the oldest ones.<p class="paragraph"/><h3>AsynchronousDataStore</h3><p class="paragraph"/>By default Wicket wraps <code>DiskDataStore</code> with <code>org.apache.wicket.pageStore.AsynchronousDataStore</code>. The role of <code>AsynchronousDataStore</code> is to detach the http worker thread from waiting for the write of the page bytes to the disk.
-To disable it use: <code>org.apache.wicket.settings.IStoreSettings.setAsynchronous(false)</code>. AsynchronousDataStore can delay the storage of pages' bytes for at most <code>org.apache.wicket.settings.IStoreSettings.setAsynchronousQueueCapacity(int)</code> pages. If this capacity is exceeded then the page's bytes are written synchronously to the backing <code>IDataStore</code>.<p class="paragraph"/><h3>DebugDiskDataStore</h3><p class="paragraph"/>Wicket provides an extension of <code>DiskDataStore</code> that can be used to browse the content of the 'data' files created by <code>DiskDataStore</code>. This debug enabled <code>DiskDataStore</code> is automatically setup when wicket-devutils.jar is in the classpath.
+To disable it use: <code>org.apache.wicket.settings.IStoreSettings.setAsynchronous(false)</code>. AsynchronousDataStore can delay the storage of pages' bytes for at most <code>org.apache.wicket.settings.IStoreSettings.setAsynchronousQueueCapacity(int)</code> pages. If this capacity is exceeded then the page's bytes are written synchronously to the backing <code>IDataStore</code>.<p class="paragraph"/><h3>DebugDiskDataStore</h3><p class="paragraph"/>Wicket provides an extension of <code>DiskDataStore</code> that can be used to browse the content of the 'data' files created by <code>DiskDataStore</code>. This extension can be found in wicket-devutils.jar and needs to be enabled in the <code>init</code>-method of your application via 
+<div class="code"><pre>DebugDiskDataStore.register(<span class="java&#45;keyword">this</span>);</pre></div>
 The debug information can be seen at http://host:port/context/wicket/internal/debug/diskDataStore<p class="paragraph"/><h3>HttpSessionDataStore</h3><p class="paragraph"/>In some environments like Google AppEngine it is not allowed to write to the file system and thus <code>DiskDataStore</code> cannot be used. In this case <code>org.apache.wicket.pageStore.memory.HttpSessionDataStore</code> can be used as replacement. This implementation of <code>IDataStore</code> is not persistent and puts all the data in the http session.
 Wicket comes with 2 default eviction strategies to keep the size of the http session reasonable:
 <ul class="star">
@@ -202,9 +203,12 @@
            <span class="java&#45;keyword">return</span>  <span class="java&#45;keyword">new</span> HttpSessionDataStore(pageManagerContext, <span class="java&#45;keyword">new</span> PageNumberEvictionStrategy(20));
        &#125;
    &#125;
-&#125;</pre></div><p class="paragraph"/>
+&#125;</pre></div><p class="paragraph"/><h3>DebugBar</h3><p class="paragraph"/>Further insights which can be valueable during debugging can be retrieved using the <code>org.apache.wicket.devutils.debugbar.DebugBar</code> from wicket-devutils.jar. It's a panel which you simply add:<p class="paragraph"/>Java: 
+<div class="code"><pre>add(<span class="java&#45;keyword">new</span> DebugBar(<span class="java&#45;quote">"debug"</span>));</pre></div><p class="paragraph"/>HTML:
+<div class="code"><pre>&#60;span wicket:id=<span class="java&#45;quote">"debug"</span>/&#62;</pre></div>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../guide/bestpractices.html">&lt;&lt; <strong>24</strong><span>Wicket Best Practices</span></a></div>
@@ -231,7 +235,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/introduction.html
===================================================================
--- guide/introduction.html	(revision 1675105)
+++ guide/introduction.html	(working copy)
@@ -149,7 +149,7 @@
                 <div class="project">
                     <h1>1 Introduction - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -190,7 +190,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/jee.html
===================================================================
--- guide/jee.html	(revision 1675105)
+++ guide/jee.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>19 Integration with enterprise containers - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -231,10 +231,12 @@
 
 <h2 id="jee_3">19.3 JSR-330 annotations</h2>
 <p class="paragraph"/>Spring (and Guice) users can use standard <a href="http://jcp.org/en/jsr/detail?id=330" target="blank">JSR-330</a> annotations to wire their dependencies. This will make their code more interoperable with other containers that support this standard:<p class="paragraph"/><div class="code"><pre>//inject a bean specifying its name with JSR&#45;330 annotations
-  <code>Inject </code>Named(<span class="java&#45;quote">"anotherName"</span>)
+  @Inject 
+  @Named(<span class="java&#45;quote">"anotherName"</span>)
   <span class="java&#45;keyword">private</span> EnterpriseMessage enterpriseMessage;</pre></div>
 
 
+
 <h2 id="jee_4">19.4 Summary</h2>
 <p class="paragraph"/>In this chapter we have seen how to integrate Wicket applications with Spring and with an EJB container. Module wicket-examples contains also an example of integration with Guice (see application class <code>org.apache.wicket.examples.guice.GuiceApplication</code>).<p class="paragraph"/>
 
@@ -266,7 +268,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/jsintegration.html
===================================================================
--- guide/jsintegration.html	(revision 1675105)
+++ guide/jsintegration.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>16 An example of integration with JavaScript - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -227,7 +227,7 @@
 &#125;<p class="paragraph"/>@Override
 <span class="java&#45;keyword">public</span> &#60;Date&#62; IConverter&#60;Date&#62; getConverter(<span class="java&#45;object">Class</span>&#60;Date&#62; type) &#123;
 	<span class="java&#45;keyword">return</span> (IConverter&#60;Date&#62;) dateConverter;
-&#125;</pre></div><p class="paragraph"/>The first thing to do inside onInitialize is to ensure that our component will have a markup id for its related text field. This is done invoking setOutputMarkupId(true).<p class="paragraph"/>Next, JQueryDateField tries to retrieve the date format and the ISO language code that must be used as initialization parameters. This is done using class <code>ResourceModel</code> which searches for a given resource in the available bundles. If no value is found for date format or for ISO language code, default values will be used ('mm/dd/yy' and 'en-GB').<p class="paragraph"/>To generate the relative URL for calendar icon, we load it as package resource reference and then we use <code>Component</code>'s method urlFor to get the URL value (we have seen this method in paragraph 7.3.2).<p class="paragraph"/>The last configuration instruction executed inside onInitialize is the instantiation of the custom converter used by our component. This converter is an instance of the built-in class <code>org.apache.wicket.datetime.PatternDateConvert</code> and must use the previously retrieved date format to perform conversion operations. Now to tell our component to use this converter we must return it overriding <code>FormComponent</code>'s method <code>getConverter</code>.<p class="paragraph"/><h3>Header contributor code</h3><p class="paragraph"/>The rest of the code of our custom component is inside method <code>renderHeader</code>, which is responsible for adding to page header the bundled JQuery library, the three files from JQuery UI distribution, the custom file JQDatePicker.js and the invocation of function <code>initJQDatepicker</code>:<p class="paragraph"/><div class="code"><pre>@Override
+&#125;</pre></div><p class="paragraph"/>The first thing to do inside onInitialize is to ensure that our component will have a markup id for its related text field. This is done invoking setOutputMarkupId(true).<p class="paragraph"/>Next, JQueryDateField tries to retrieve the date format and the ISO language code that must be used as initialization parameters. This is done using class <code>ResourceModel</code> which searches for a given resource in the available bundles. If no value is found for date format or for ISO language code, default values will be used ('mm/dd/yy' and 'en-GB').<p class="paragraph"/>To generate the relative URL for calendar icon, we load it as package resource reference and then we use <code>Component</code>'s method urlFor to get the URL value (we have seen this method in <a href="../guide/single.html#requestProcessing_3" class="guide">paragraph 9.3.2</a>).<p class="paragraph"/>The last configuration instruction executed inside onInitialize is the instantiation of the custom converter used by our component. This converter is an instance of the built-in class <code>org.apache.wicket.datetime.PatternDateConvert</code> and must use the previously retrieved date format to perform conversion operations. Now to tell our component to use this converter we must return it overriding <code>FormComponent</code>'s method <code>getConverter</code>.<p class="paragraph"/><h3>Header contributor code</h3><p class="paragraph"/>The rest of the code of our custom component is inside method <code>renderHeader</code>, which is responsible for adding to page header the bundled JQuery library, the three files from JQuery UI distribution, the custom file JQDatePicker.js and the invocation of function <code>initJQDatepicker</code>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void renderHead(IHeaderResponse response) &#123;
 	<span class="java&#45;keyword">super</span>.renderHead(response);<p class="paragraph"/>	//<span class="java&#45;keyword">if</span> component is disabled we don't have to load the JQueryUI datepicker
 	<span class="java&#45;keyword">if</span>(!isEnabledInHierarchy())
@@ -253,10 +253,11 @@
 &#125;</pre></div><p class="paragraph"/>If component is disabled the calendar icon must be hidden and no datepicker must be displayed. That's why <code>renderHeader</code> is skipped if component is not enabled.<p class="paragraph"/>To get a reference to the bundled JQuery library we used the JavaScript setting interface <code>IJavaScriptLibrarySettings</code> and its method <code>getJQueryReference</code>.<p class="paragraph"/>In the last part of <code>renderHeader</code> we build the string to invoke function <code>initJQDatepicker</code> using the values obtained inside onInitialize. Unfortunately the date format used by JQuery UI is different from the one adopted in Java so we have to convert it before building the JavaScript code. This init script is rendered into header section using a <code>OnLoadHeaderItem</code> to ensure that it will be executed after all the other scripts have been loaded.<p class="paragraph"/><blockquote class="note">
 If we add more than one instance of our custom component to a single page, static resources are rendered to the header section just once. Wicket automatically checks if a static resource is already referenced by a page and if so, it will not render it again.<p class="paragraph"/>This does not apply to the init script which is dynamically generated and is rendered for every instance of the component.
 </blockquote><p class="paragraph"/><blockquote class="warning">
-Our datepicker is not ready yet to be used with AJAX. In chapter 16 we will see how to modify it to make it AJAX-compatible.
+Our datepicker is not ready yet to be used with AJAX. In <a href="../guide/single.html#ajax" class="guide">chapter 18</a> we will see how to modify it to make it AJAX-compatible.
 </blockquote>
 
 
+
 <h2 id="jsintegration_3">16.3 Summary</h2>
 <p class="paragraph"/>In this brief chapter we have seen how custom components can be integrated with <a href="http://en.wikipedia.org/wiki/Dynamic_HTML" target="blank">DHTML</a> technologies. To do so we have used most of what we have learnt in this guide. Now we are able to build complex components with a rich user experience. However this is not enough yet to develop <a href="http://en.wikipedia.org/wiki/Web_2.0" target="blank">Web 2.0</a> applications. We still have to cover a fundamental technology like AJAX and some other Wicket-related topics that will help us building our application in more modular and efficient way.<p class="paragraph"/><p class="paragraph"/>
 
@@ -287,7 +288,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/keepControl.html
===================================================================
--- guide/keepControl.html	(revision 1675105)
+++ guide/keepControl.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6 Keeping control over HTML - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -398,7 +398,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/layout.html
===================================================================
--- guide/layout.html	(revision 1675105)
+++ guide/layout.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>5 Wicket as page layout manager - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -414,7 +414,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/maven.html
===================================================================
--- guide/maven.html	(revision 1675105)
+++ guide/maven.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>26 Working with Maven (Appendix) - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -179,12 +179,12 @@
 
 
 <h2 id="maven_1">26.1 Switching Wicket to DEPLOYMENT mode</h2>
-<p class="paragraph"/>As pointed out in the note at page 9, Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:<p class="paragraph"/><div class="code"><pre>&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;
+<p class="paragraph"/>As pointed out in the note in <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2</a>, Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:<p class="paragraph"/><div class="code"><pre>&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;
 &#42;&#42;&#42; WARNING: Wicket is running in DEVELOPMENT mode.              &#42;&#42;&#42;
 &#42;&#42;&#42;                               ^^^^^^^^^^^                    &#42;&#42;&#42;
 &#42;&#42;&#42; Do NOT deploy to your live server(s) without changing <span class="java&#45;keyword">this</span>.  &#42;&#42;&#42;
 &#42;&#42;&#42; See Application&#35;getConfigurationType() <span class="java&#45;keyword">for</span> more information. &#42;&#42;&#42;
-&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;</pre></div><p class="paragraph"/>As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in three different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:<p class="paragraph"/><div class="code"><pre>&#60;filter&#62;      
+&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;</pre></div><p class="paragraph"/>As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in four different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:<p class="paragraph"/><div class="code"><pre>&#60;filter&#62;      
 	&#60;filter&#45;name&#62;wicket.MyApp&#60;/filter&#45;name&#62;
 	&#60;filter&#45;class&#62;org.apache.wicket.protocol.http.WicketFilter&#60;/filter&#45;class&#62;
 	&#60;init&#45;param&#62;
@@ -198,15 +198,16 @@
 &#60;/filter&#62;</pre></div><p class="paragraph"/>The additional parameter is written in bold. The same parameter can be also expressed as context parameter:<p class="paragraph"/><div class="code"><pre>&#60;context&#45;param&#62;
     &#60;param&#45;name&#62;configuration&#60;/param&#45;name&#62;
     &#60;param&#45;value&#62;deployment&#60;/param&#45;value&#62;
-&#60;/context&#45;param&#62;</pre></div><p class="paragraph"/>The third way to set the running mode is using system property wicket.configuration. This parameter can be specified in the command line that starts up the server:<p class="paragraph"/><div class="code"><pre>java &#45;Dwicket.configuration=deployment ...</pre></div><p class="paragraph"/>Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
+&#60;/context&#45;param&#62;</pre></div><p class="paragraph"/>The third way to set the running mode is using system property wicket.configuration. This parameter can be specified in the command line that starts up the server:<p class="paragraph"/><div class="code"><pre>java &#45;Dwicket.configuration=deployment ...</pre></div><p class="paragraph"/>The last option is to set it in your Java code (e.g. in the init-method of your WebApplication):<p class="paragraph"/><div class="code"><pre>setConfigurationType(RuntimeConfigurationType.DEPLOYMENT);</pre></div><p class="paragraph"/>Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
 
 
+
 <h2 id="maven_2">26.2 Creating a Wicket project from scratch and importing it into our favourite IDE</h2>
 <p class="paragraph"/><blockquote class="note">
 In order to follow the instructions of this paragraph you must have Maven installed on your system. The installation of Maven is out of the scope of this guide but you can easily find an extensive documentation about it on Internet.
 Another requirement is a good Internet connection (a flat ADSL is enough) because Maven needs to connect to its central repository to download the required dependencies. 
 </blockquote><p class="paragraph"/>
-<h3>From Maven to our IDE</h3><p class="paragraph"/>Wicket project and its dependencies are managed using Maven1. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
+<h3>From Maven to our IDE</h3><p class="paragraph"/>Wicket project and its dependencies are managed using Maven. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
 The main step to create such a project is to run the command which generates project's structure and its artifacts. If we are not familiar with Maven or we simply don't want to type this command by hand, we can use the utility form on Wicket site at <a href="http://wicket.apache.org/start/quickstart.html" target="blank">http://wicket.apache.org/start/quickstart.html</a> :<p class="paragraph"/><img border="0" class="center" src="../img/quickstart-webpage.png"></img><p class="paragraph"/>Here we have to specify the root package of our project (GroupId), the project name (ArtifactId) and which version of Wicket we want to use (Version).
 Once we have run the resulting command in the OS shell, we will have a new folder with the same name of the project (i.e the ArtifactId). Inside this folder we can find a file called pom.xml. This is the main file used by Maven to manage our project. For example, using “org.wicketTutorial” as GroupId and “MyProject” as ArtifactId, we would obtain the following artifacts:<p class="paragraph"/><div class="code"><pre>.&#77;yProject
         |   pom.xml
@@ -261,7 +262,7 @@
 </blockquote><p class="paragraph"/><blockquote class="note">
 If we modify the pom.xml file (for example adding further dependencies) we must regenerate project's artifacts and refresh the project (F5 key) to reflect changes into Eclipse.
 </blockquote><p class="paragraph"/><h3>Speeding up development with plugins.</h3><p class="paragraph"/>Now that we have our project loaded into our IDE we could start coding our components directly by hand. However it would be a shame to not leverage the free and good Wicket plugins available for our IDE. The following is a brief overview of the most widely used plugins for each of the three main IDEs considered so far.<p class="paragraph"/><strong class="bold">NetBeans</strong>
-NetBeans offers Wicket support thought 'NetBeans Plugin for Wicket' hosted at <a href="http://java.net/projects/nbwicketsupport/" target="blank">http://java.net/projects/nbwicketsupport/</a> . This plugin is released under CDDL-1.0 license. 
+NetBeans offers Wicket support through 'NetBeans Plugin for Wicket' hosted at <a href="http://plugins.netbeans.org/plugin/3586/wicket-1-4-support" target="blank">http://plugins.netbeans.org/plugin/3586/wicket-1-4-support</a> . This plugin is released under CDDL-1.0 license. 
 You can  find a nice introduction guide to this plugin at <a href="http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html" target="blank">http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html</a> .<p class="paragraph"/><strong class="bold">Intellj IDEA</strong>
 For JetBrain IDEA we can use WicketForge plugin, hosted at Google Code <a href="http://code.google.com/p/wicketforge/" target="blank">http://code.google.com/p/wicketforge/</a> . The plugin is released under ASF 2.0 license.<p class="paragraph"/><strong class="bold">Eclipse</strong>
 With Eclipse we can install one of the plugins that supports Wicket. As of the writing of this document, the most popular is probably Qwickie, available in the Eclipse Marketplace and hosted on Google Code at <a href="http://code.google.com/p/qwickie/" target="blank">http://code.google.com/p/qwickie/</a> .
@@ -268,6 +269,7 @@
 QWickie is released under ASF 2.0 license.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../guide/internals.html">&lt;&lt; <strong>25</strong><span>Wicket Internals</span></a></div>
@@ -294,7 +296,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/modelsforms.html
===================================================================
--- guide/modelsforms.html	(revision 1675105)
+++ guide/modelsforms.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11 Wicket models and forms - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -213,10 +213,11 @@
 		<span class="java&#45;keyword">return</span> <span class="java&#45;keyword">new</span> Date().toString();
 	&#125;
 &#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"timeStamp"</span>, timeStampModel));</pre></div><p class="paragraph"/>Even if sometimes writing a custom model could be a good choice to solve a specific problem, Wicket already provides a set of IModel implementations which should fit most of our needs. In the next paragraph we will see a couple of models that allow us to easily integrate JavaBeans with our web applications and in particular with our forms.<p class="paragraph"/><blockquote class="note">
-By default class Component escapes HTML sensitive characters (like '&#60;', '&#62;' or '&#38;') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML <a href="http://en.wikipedia.org/wiki/Character_entity_reference" target="blank">entity</a> (for example '&#60;' becomes '&#38;lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
+By default the class Component escapes HTML sensitive characters (like '&#60;', '&#62;' or '&#38;') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML <a href="http://en.wikipedia.org/wiki/Character_entity_reference" target="blank">entity</a> (for example '&#60;' becomes '&#38;lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
 </blockquote>
 
 
+
 <h2 id="modelsforms_2">11.2 Models and JavaBeans</h2>
 <p class="paragraph"/>One of the main goals of Wicket is to use JavaBeans and POJO as data model, overcoming the impedance mismatch between web technologies and OO paradigm. In order to make this task as easy as possible, Wicket offers two special model classes: <code>org.apache.wicket.model.PropertyModel</code> and <code>org.apache.wicket.model.CompoundPropertyModel</code>. We will see how to use them in the next two examples, using the following JavaBean as the data object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class Person <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> surname;
@@ -502,7 +503,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/nativewebsockets.html
===================================================================
--- guide/nativewebsockets.html	(revision 1675105)
+++ guide/nativewebsockets.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>20 Native WebSockets - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -333,7 +333,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/advanced_1.html
===================================================================
--- guide/pages/advanced_1.html	(revision 1675105)
+++ guide/pages/advanced_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>17.1 Enriching components with behaviors - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -180,7 +180,7 @@
 </ul><p class="paragraph"/>For example the following behavior prepends a red asterisk to the tag of a form component if this one  is required:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RedAsteriskBehavior <span class="java&#45;keyword">extends</span> Behavior &#123;<p class="paragraph"/>  @Override
   <span class="java&#45;keyword">public</span> void beforeRender(Component component) &#123;
       Response response = component.getResponse();
-      <span class="java&#45;object">StringBuffer</span> asterisktHtml = <span class="java&#45;keyword">new</span> <span class="java&#45;object">StringBuffer</span>(200);<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(componet <span class="java&#45;keyword">instanceof</span> FormComponent 
+      <span class="java&#45;object">StringBuffer</span> asterisktHtml = <span class="java&#45;keyword">new</span> <span class="java&#45;object">StringBuffer</span>(200);<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(component <span class="java&#45;keyword">instanceof</span> FormComponent 
             &#38;&#38; ((FormComponent)component).isRequired())&#123;
         asteriskHtml.append(<span class="java&#45;quote">" &#60;b style=&#34;color:red;font&#45;size:medium&#34;&#62;&#42;&#60;/b&#62;"</span>);
       &#125;  
@@ -216,7 +216,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/advanced_2.html
===================================================================
--- guide/pages/advanced_2.html	(revision 1675105)
+++ guide/pages/advanced_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>17.2 Generating callback URLs with IRequestListener - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -262,7 +262,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/advanced_3.html
===================================================================
--- guide/pages/advanced_3.html	(revision 1675105)
+++ guide/pages/advanced_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>17.3 Initializers - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -203,7 +203,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/advanced_4.html
===================================================================
--- guide/pages/advanced_4.html	(revision 1675105)
+++ guide/pages/advanced_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>17.4 Using JMX with Wicket - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/advanced_5.html
===================================================================
--- guide/pages/advanced_5.html	(revision 1675105)
+++ guide/pages/advanced_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>17.5 Generating HTML markup from code - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -221,7 +221,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/advanced_6.html
===================================================================
--- guide/pages/advanced_6.html	(revision 1675105)
+++ guide/pages/advanced_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>17.6 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/ajax_1.html
===================================================================
--- guide/pages/ajax_1.html	(revision 1675105)
+++ guide/pages/ajax_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18.1 How to use AJAX components and behaviors - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -175,7 +175,7 @@
 	    label.setDefaultModelObject(<span class="java&#45;quote">"Another value 4 label."</span>);
 	    target.add(label);
 	&#125;  	
-&#125;;</pre></div><p class="paragraph"/>Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to <code>AjaxRequestTarget</code>. This can be done using one of the two methods seen in paragraph 4.3:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> Label label = <span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"labelComponent"</span>, <span class="java&#45;quote">"Initial value."</span>);
+&#125;;</pre></div><p class="paragraph"/>Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to <code>AjaxRequestTarget</code>. This can be done using one of the two methods seen in <a href="../guide/single.html#keepControl_3" class="guide">paragraph 6.3</a>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> Label label = <span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"labelComponent"</span>, <span class="java&#45;quote">"Initial value."</span>);
 //autogenerate a markup id
 label.setOutputMarkupId(<span class="java&#45;keyword">true</span>);
 add(label);
@@ -197,6 +197,7 @@
 </blockquote>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/advanced.html">&lt;&lt; <strong>17</strong><span>Wicket advanced topics</span></a></div>
@@ -223,7 +224,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/ajax_2.html
===================================================================
--- guide/pages/ajax_2.html	(revision 1675105)
+++ guide/pages/ajax_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18.2 Build-in AJAX components - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="ajax_2">18.2 Build-in AJAX components</h2>
-<p class="paragraph"/>Wicket distribution comes with a number of built-in AJAX components ready to be used. Some of them are the ajaxified version of common components like links and buttons, while others are AJAX-specific components.<p class="paragraph"/>AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of appending “Ajax” to the component class name.<p class="paragraph"/>This paragraph provides an overview of what we can find in Wicket to start writing AJAX-enhanced web applications.<p class="paragraph"/><h3>Links and buttons</h3><p class="paragraph"/>In the previous paragraph we have already introduced component AjaxLink. Wicket provides also the ajaxified versions of submitting components SubmitLink and Button which are simply called AjaxSubmitLink and AjaxButton. These components come with a version of methods onSubmit, onError and onAfterSubmit that takes in input also an instance of <code>AjaxRequestTarget</code>.<p class="paragraph"/>Both components are in package <code>org.apache.wicket.ajax.markup.html.form</code>.<p class="paragraph"/><h3>Fallback components</h3><p class="paragraph"/>Building an entire site using AJAX can be risky as some clients may not support this technology. In order to provide an usable version of our site also to these clients, we can use components <code>AjaxFallbackLink</code> and <code>AjaxFallbackButton</code> which are able to automatically degrade to a standard link or to a standard button if client doesn't support AJAX.<p class="paragraph"/><h3>AJAX Checkbox</h3><p class="paragraph"/>Class <code>org.apache.wicket.ajax.markup.html.form.AjaxCheckBox</code> is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is <code>onUpdate(AjaxRequestTarget target)</code>. The component extends standard checkbox component <code>CheckBox</code> adding an <code>AjaxFormComponentUpdatingBehavior</code> to itself (we will see this behavior later in paragraph 16.3.3).<p class="paragraph"/><h3>AJAX editable labels</h3><p class="paragraph"/>An editable label is a special label that can be edited by the user when she/he clicks on it. Wicket ships three different implementations for this component (all inside package <code>org.apache.wicket.extensions.ajax.markup.html</code>):
+<p class="paragraph"/>Wicket distribution comes with a number of built-in AJAX components ready to be used. Some of them are the ajaxified version of common components like links and buttons, while others are AJAX-specific components.<p class="paragraph"/>AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of prepending “Ajax” to the component class name.<p class="paragraph"/>This paragraph provides an overview of what we can find in Wicket to start writing AJAX-enhanced web applications.<p class="paragraph"/><h3>Links and buttons</h3><p class="paragraph"/>In the previous paragraph we have already introduced component AjaxLink. Wicket provides also the ajaxified versions of submitting components SubmitLink and Button which are simply called AjaxSubmitLink and AjaxButton. These components come with a version of methods onSubmit, onError and onAfterSubmit that takes in input also an instance of <code>AjaxRequestTarget</code>.<p class="paragraph"/>Both components are in package <code>org.apache.wicket.ajax.markup.html.form</code>.<p class="paragraph"/><h3>Fallback components</h3><p class="paragraph"/>Building an entire site using AJAX can be risky as some clients may not support this technology. In order to provide an usable version of our site also to these clients, we can use components <code>AjaxFallbackLink</code> and <code>AjaxFallbackButton</code> which are able to automatically degrade to a standard link or to a standard button if client doesn't support AJAX.<p class="paragraph"/><h3>AJAX Checkbox</h3><p class="paragraph"/>Class <code>org.apache.wicket.ajax.markup.html.form.AjaxCheckBox</code> is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is <code>onUpdate(AjaxRequestTarget target)</code>. The component extends standard checkbox component <code>CheckBox</code> adding an <code>AjaxFormComponentUpdatingBehavior</code> to itself (we will see this behavior later in <a href="../guide/single.html#ajax_3" class="guide">paragraph 18.3.3</a>).<p class="paragraph"/><h3>AJAX editable labels</h3><p class="paragraph"/>An editable label is a special label that can be edited by the user when she/he clicks on it. Wicket ships three different implementations for this component (all inside package <code>org.apache.wicket.extensions.ajax.markup.html</code>):
 <ul class="star">
 <li><strong class="bold">AjaxEditableLabel</strong>: it's a basic version of editable label. User can edit the content of the label with a text field. This is also the base class for the other two editable labels.</li>
 <li><strong class="bold">AjaxEditableMultiLineLabel</strong>: this label supports multi-line values and uses a text area as editor component.</li>
@@ -334,7 +334,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/ajax_3.html
===================================================================
--- guide/pages/ajax_3.html	(revision 1675105)
+++ guide/pages/ajax_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18.3 Built-in AJAX behaviors - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -245,7 +245,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/ajax_4.html
===================================================================
--- guide/pages/ajax_4.html	(revision 1675105)
+++ guide/pages/ajax_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18.4 Using an activity indicator - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -206,7 +206,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/ajax_5.html
===================================================================
--- guide/pages/ajax_5.html	(revision 1675105)
+++ guide/pages/ajax_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18.5 AJAX request attributes and call listeners - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -164,7 +164,7 @@
 
 <h2 id="ajax_5">18.5 AJAX request attributes and call listeners</h2>
 <p class="paragraph"/>Starting from version 6.0 Wicket has introduced two entities which allow us to control how an AJAX request is generated on client side and to specify the custom JavaScript code we want to execute during request handling. These entities are class <code>AjaxRequestAttributes</code> and interface <code>IAjaxCallListener</code>, both placed in package <code>org.apache.wicket.ajax.attributes</code>.<p class="paragraph"/>AjaxRequestAttributes exposes the attributes used to generate the JavaScript call invoked on client side to start an AJAX request. Each attribute will be passed as a <a href="http://en.wikipedia.org/wiki/JSON" target="blank">JSON</a> parameter to the JavaScript function <code>Wicket.Ajax.ajax</code> which is responsible for sending the concrete AJAX request. Every JSON parameter is identified by a short name. Here is a partial list of the available parameters:<p class="paragraph"/><table class="wiki-table" cellpadding="0" cellspacing="0" border="0"><tr><th><strong class="bold">Short name</strong></th><th><strong class="bold">Description</strong></th><th><strong class="bold">Default value</strong></th></tr><tr class="table-odd"><td>u</td><td>The callback URL used to serve the AJAX request that will be sent.</td><td>&#160;</td></tr><tr class="table-even"><td>c</td><td>The id of the component that wants to start the AJAX call.</td><td>&#160;</td></tr><tr class="table-odd"><td>e</td><td>A list of event (click, change, etc...) that can trigger the AJAX call.</td><td>domready</td></tr><tr class="table-even"><td>m</td><td>The request method that must be used (GET or POST).</td><td>GET</td></tr><tr class="table-odd"><td>f</td><td>The id of the form that must be submitted with the AJAX call.</td><td>&#160;</td></tr><tr class="table-even"><td>mp</td><td>If the AJAX call involves the submission of a form, this flag indicates whether the data must be encoded using the encoding mode “multipart/form-data”.</td><td>false</td></tr><tr class="table-odd"><td>sc</td><td>The input name of the submitting component of the form</td><td>&#160;</td></tr><tr class="table-even"><td>async</td><td>A boolean parameter that indicates if the AJAX call is asynchronous (true) or not.</td><td>true</td></tr><tr class="table-odd"><td>wr</td><td>Specifies the type of data returned by the AJAX call (XML, HTML, JSON, etc...).</td><td>XML</td></tr><tr class="table-even"><td>bh, pre, bsh, ah, sh, fh, coh</td><td>This is a list of the listeners that are executed on client side (they are JavaScript scripts) during the lifecycle of an AJAX request. Each short name is the abbreviation of one of the methods defined in the interface IAjaxCallListener (see below).</td><td>An empty list</td></tr></table><p class="paragraph"/><blockquote class="note">
-A full list of the available request parameters as well as more details on the related JavaScript code can be found at <a href="https://cwiki.apache.org/confluence/" target="blank">https://cwiki.apache.org/confluence/ display/WICKET/Wicket+Ajax</a> display/WICKET/Wicket+Ajax .
+A full list of the available request parameters as well as more details on the related JavaScript code can be found at <a href="https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax" target="blank">https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax</a> .
 </blockquote><p class="paragraph"/>Parameters 'u' (callback URL) and 'c' (the id of the component) are generated by the AJAX behavior that will serve the AJAX call and they are not accessible through <code>AjaxRequestAttributes</code>.<p class="paragraph"/>Here is the final AJAX function generate for the behavior used in example project <code>AjaxEventBehavior</code> Example:<p class="paragraph"/><div class="code"><pre>Wicket.Ajax.ajax(&#123;<span class="java&#45;quote">"u"</span>:<span class="java&#45;quote">"./?0&#45;1.IBehaviorListener.0&#45;clickCounterLabel"</span>, <span class="java&#45;quote">"e"</span>:<span class="java&#45;quote">"click"</span>,               
                   <span class="java&#45;quote">"c"</span>:<span class="java&#45;quote">"clickCounterLabel1"</span>&#125;);</pre></div><p class="paragraph"/>Even if most of the times we will let Wicket generate request attributes for us, both AJAX components and behaviors give us the chance to modify them overriding their method <code>updateAjaxAttributes (AjaxRequestAttributes attributes)</code>.<p class="paragraph"/>One of the attribute we may need to modify is the list of <code>IAjaxCallListeners</code> returned by method <code>getAjaxCallListeners()</code>.<p class="paragraph"/><code>IAjaxCallListener</code> defines a set of methods which return the JavaScript code (as a <code>CharSequence</code>) that must be executed on client side when the AJAX request handling reaches a given stage:
 <ul class="star">
@@ -215,7 +215,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/ajax_6.html
===================================================================
--- guide/pages/ajax_6.html	(revision 1675105)
+++ guide/pages/ajax_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18.6 Creating custom AJAX call listener - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -232,7 +232,7 @@
 <li>'/ajax/call/complete': called when the AJAX call has completed.</li>
 <li>'/dom/node/removing': called when a component is about to be removed via AJAX. This  happens when component markup is updated via AJAX (i.e. the component itself or one of its containers has been added to <code>AjaxRequestTarget</code>)</li>
 <li>'/dom/node/added': called when a component has been added via AJAX. Just like '/dom/node/removing', this event is triggered when a component is added to <code>AjaxRequestTarget</code>.</li>
-</ul><p class="paragraph"/>The callback function takes in input the following parameters:  attrs, jqXHR, textStatus, jqEvent and errorThrown. The first three parameters are the same seen before with <code>IAjaxCallListener</code> while jqEvent is an event internally fired by Wicket. The last parameter errorThrown indicates if an error has occurred during the AJAX call.<p class="paragraph"/>To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in chapter 14. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
+</ul><p class="paragraph"/>The callback function takes in input the following parameters:  attrs, jqXHR, textStatus, jqEvent and errorThrown. The first three parameters are the same seen before with <code>IAjaxCallListener</code> while jqEvent is an event internally fired by Wicket. The last parameter errorThrown indicates if an error has occurred during the AJAX call.<p class="paragraph"/>To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in <a href="../guide/single.html#jsintegration" class="guide">chapter 16</a>. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
 <ul class="star">
 <li>After been refreshed, the component loses every JavaScript handler set on it. This is not a problem for our datepicker as it sets a new JQuery datepicker every time is rendered (inside method renderHead).</li>
 <li>The markup previously created with JavaScript is not removed. For our datepicker this means that the icon used to open the calendar won't be removed while a new one will be added each time the component is refreshed.</li>
@@ -272,7 +272,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/ajax_7.html
===================================================================
--- guide/pages/ajax_7.html	(revision 1675105)
+++ guide/pages/ajax_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>18.7 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_1.html
===================================================================
--- guide/pages/bestpractices_1.html	(revision 1675105)
+++ guide/pages/bestpractices_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.1 Encapsulate components correctly - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -264,7 +264,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_10.html
===================================================================
--- guide/pages/bestpractices_10.html	(revision 1675105)
+++ guide/pages/bestpractices_10.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.10 Do not pass components to constructors - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -231,7 +231,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_11.html
===================================================================
--- guide/pages/bestpractices_11.html	(revision 1675105)
+++ guide/pages/bestpractices_11.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.11 Use the Wicket session only for global data - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -203,7 +203,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_12.html
===================================================================
--- guide/pages/bestpractices_12.html	(revision 1675105)
+++ guide/pages/bestpractices_12.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.12 Do not use factories for components - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -232,7 +232,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_13.html
===================================================================
--- guide/pages/bestpractices_13.html	(revision 1675105)
+++ guide/pages/bestpractices_13.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.13 Every page and component must be tested - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_14.html
===================================================================
--- guide/pages/bestpractices_14.html	(revision 1675105)
+++ guide/pages/bestpractices_14.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.14 Avoid interactions with other servlet filters - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_15.html
===================================================================
--- guide/pages/bestpractices_15.html	(revision 1675105)
+++ guide/pages/bestpractices_15.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.15 Cut small classes and methods - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -207,7 +207,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_16.html
===================================================================
--- guide/pages/bestpractices_16.html	(revision 1675105)
+++ guide/pages/bestpractices_16.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.16 The argument &quot;Bad documentation&quot; - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_17.html
===================================================================
--- guide/pages/bestpractices_17.html	(revision 1675105)
+++ guide/pages/bestpractices_17.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.17 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_2.html
===================================================================
--- guide/pages/bestpractices_2.html	(revision 1675105)
+++ guide/pages/bestpractices_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.2 Put models and page data in fields - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_3.html
===================================================================
--- guide/pages/bestpractices_3.html	(revision 1675105)
+++ guide/pages/bestpractices_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.3 Correct naming for Wicket IDs - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_4.html
===================================================================
--- guide/pages/bestpractices_4.html	(revision 1675105)
+++ guide/pages/bestpractices_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.4 Avoid changes at the component tree - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -198,7 +198,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_5.html
===================================================================
--- guide/pages/bestpractices_5.html	(revision 1675105)
+++ guide/pages/bestpractices_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.5 Implement visibilities of components correctly - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -208,7 +208,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_6.html
===================================================================
--- guide/pages/bestpractices_6.html	(revision 1675105)
+++ guide/pages/bestpractices_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.6 Always use models - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -197,7 +197,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_7.html
===================================================================
--- guide/pages/bestpractices_7.html	(revision 1675105)
+++ guide/pages/bestpractices_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.7 Do not unwrap models within the constructor hierarchy - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -198,7 +198,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_8.html
===================================================================
--- guide/pages/bestpractices_8.html	(revision 1675105)
+++ guide/pages/bestpractices_8.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.8 Pass models extended components - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -197,7 +197,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/bestpractices_9.html
===================================================================
--- guide/pages/bestpractices_9.html	(revision 1675105)
+++ guide/pages/bestpractices_9.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>24.9 Validators must not change any data or models - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/componentLifecycle_1.html
===================================================================
--- guide/pages/componentLifecycle_1.html	(revision 1675105)
+++ guide/pages/componentLifecycle_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>7.1 Lifecycle stages of a component - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -200,7 +200,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/componentLifecycle_2.html
===================================================================
--- guide/pages/componentLifecycle_2.html	(revision 1675105)
+++ guide/pages/componentLifecycle_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>7.2 Hook methods for component lifecycle - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/componentLifecycle_3.html
===================================================================
--- guide/pages/componentLifecycle_3.html	(revision 1675105)
+++ guide/pages/componentLifecycle_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>7.3 Initialization stage - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/componentLifecycle_4.html
===================================================================
--- guide/pages/componentLifecycle_4.html	(revision 1675105)
+++ guide/pages/componentLifecycle_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>7.4 Rendering stage - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -246,7 +246,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/componentLifecycle_5.html
===================================================================
--- guide/pages/componentLifecycle_5.html	(revision 1675105)
+++ guide/pages/componentLifecycle_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>7.5 Removing stage - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -194,7 +194,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/componentLifecycle_6.html
===================================================================
--- guide/pages/componentLifecycle_6.html	(revision 1675105)
+++ guide/pages/componentLifecycle_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>7.6 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_1.html
===================================================================
--- guide/pages/forms2_1.html	(revision 1675105)
+++ guide/pages/forms2_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.1 Default form processing - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="forms2_1">12.1 Default form processing</h2>
-<p class="paragraph"/>In paragraph 9.3 we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
+<p class="paragraph"/>In <a href="../guide/single.html#modelsforms_3" class="guide">paragraph 11.3</a> we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
 <ol>
 <li>Form validation: user input is checked to see if it satisfies the validation rules set on the form. If validation fails, step number 2 is skipped and the form should display a feedback message to explain to user what went wrong. During this step input values (which are simple strings sent with a web request) are converted into Java objects. In the next paragraphs we will explore the infrastructures provided by Wicket for the three sub-tasks involved with form validation, which are: conversion of user input into objects, validation of user input, and visualization of feedback messages.</li>
 <li>Updating of models: if validation succeeds, the form updates the model of its children components with the converted values obtained in the previous step.</li>
@@ -170,9 +170,10 @@
 <li>Invoking callback methods onSubmit() or onError(): if we didn't have any validation error, method onSubmit() is called, otherwise onError() will be called. The default implementation of both these methods is left empty and we can override them to perform custom actions.</li>
 </ol><p class="paragraph"/><blockquote class="note">
 Please note that the model of form components is updated only if no validation error occurred (i.e. step two is performed only if validation succeeds). 
-</blockquote><p class="paragraph"/>Without going into too much detail, we can say that the first two steps of form processing correspond to the invocation of one or more Form's internal methods (which are declared protected and final). Some examples of these methods are validate(), which is invoked during validation step, and updateFormComponentModels(), which is used at the step that updates the form field models.<p class="paragraph"/>The whole form processing is started invoking public method process(IFormSubmitter) (Later in paragraph 10.4 we will introduce interface IFormSubmitter). 
+</blockquote><p class="paragraph"/>Without going into too much detail, we can say that the first two steps of form processing correspond to the invocation of one or more Form's internal methods (which are declared protected and final). Some examples of these methods are validate(), which is invoked during validation step, and updateFormComponentModels(), which is used at the step that updates the form field models.<p class="paragraph"/>The whole form processing is started invoking public method process(IFormSubmitter) (Later in <a href="../guide/single.html#forms2_5" class="guide">paragraph 12.5</a> we will introduce interface IFormSubmitter). 
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/modelsforms.html">&lt;&lt; <strong>11</strong><span>Wicket models and forms</span></a></div>
@@ -199,7 +200,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_10.html
===================================================================
--- guide/pages/forms2_10.html	(revision 1675105)
+++ guide/pages/forms2_10.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.10 Stateless form - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="forms2_10">12.10 Stateless form</h2>
-<p class="paragraph"/>In chapter 6 we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).<p class="paragraph"/>Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page.<p class="paragraph"/>For this kind of page we might encounter two potential problems if we chose to use a stateful page. The first problem occurs when the user tries to login without a valid session assigned to him. This could happen if the user leaves the login page opened for a period of time bigger than the session's timeout and then he decides to log in. Under these conditions the user will be redirected to a 'Page expired' error page, which is not exactly a nice thing for user experience.<p class="paragraph"/>The second problem occurs when a malicious user or a web crawler program attempts to login into our web application, generating a huge number of page versions and consequently increasing the size of the user session.<p class="paragraph"/>To avoid these kinds of problems we should build a stateless login page which does not depend on a user session. Wicket provides a special version of the Form component called StatelessForm which is stateless by default (i.e its method getStatelessHint() returns true), hence it's an ideal solution when we want to build a stateless page with a form. A possible implementation of our login form is the following (example project StatelessLoginForm):<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;html&#62;
+<p class="paragraph"/>In <a href="../guide/single.html#versioningCaching" class="guide">chapter 8</a> we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).<p class="paragraph"/>Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page.<p class="paragraph"/>For this kind of page we might encounter two potential problems if we chose to use a stateful page. The first problem occurs when the user tries to login without a valid session assigned to him. This could happen if the user leaves the login page opened for a period of time bigger than the session's timeout and then he decides to log in. Under these conditions the user will be redirected to a 'Page expired' error page, which is not exactly a nice thing for user experience.<p class="paragraph"/>The second problem occurs when a malicious user or a web crawler program attempts to login into our web application, generating a huge number of page versions and consequently increasing the size of the user session.<p class="paragraph"/>To avoid these kinds of problems we should build a stateless login page which does not depend on a user session. Wicket provides a special version of the Form component called StatelessForm which is stateless by default (i.e its method getStatelessHint() returns true), hence it's an ideal solution when we want to build a stateless page with a form. A possible implementation of our login form is the following (example project StatelessLoginForm):<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;html&#62;
    &#60;head&#62;
       &#60;meta charset=<span class="java&#45;quote">"utf&#45;8"</span> /&#62;
    &#60;/head&#62;
@@ -207,6 +207,7 @@
 &#125;</pre></div><p class="paragraph"/>Label sessionType shows if current session is temporary or not and is set inside onBeforeRender(): if our page is really stateless the session will be always temporary. We have also inserted a feedback panel in the home page that shows if the credentials are correct. This was done to make the example form more interactive.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/modelsforms.html">&lt;&lt; <strong>11</strong><span>Wicket models and forms</span></a></div>
@@ -233,7 +234,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_11.html
===================================================================
--- guide/pages/forms2_11.html	(revision 1675105)
+++ guide/pages/forms2_11.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.11 Working with radio buttons and checkboxes - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="forms2_11">12.11 Working with radio buttons and checkboxes</h2>
-<p class="paragraph"/>In this paragraph we will see which components can be used to handle HTML radio buttons and checkboxes. Both these input elements are usually grouped together to display a list of possible choices:<p class="paragraph"/><img border="0" class="center" src="../img/choice-form-screenshot.png"></img><p class="paragraph"/>A check box can be used as single component to set a boolean property. For this purpose Wicket provides the <code>org.apache.wicket.markup.html.form.CheckBox</code> component which must be attached to &#60;input type="checkbox".../&#62; tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in paragraph 9.5 to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RegistrationInfo <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
+<p class="paragraph"/>In this paragraph we will see which components can be used to handle HTML radio buttons and checkboxes. Both these input elements are usually grouped together to display a list of possible choices:<p class="paragraph"/><img border="0" class="center" src="../img/choice-form-screenshot.png"></img><p class="paragraph"/>A check box can be used as single component to set a boolean property. For this purpose Wicket provides the <code>org.apache.wicket.markup.html.form.CheckBox</code> component which must be attached to &#60;input type="checkbox".../&#62; tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in <a href="../guide/single.html#modelsforms_5" class="guide">paragraph 11.5</a> to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RegistrationInfo <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> surname;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> address;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> email;
@@ -214,7 +214,7 @@
 		&#60;input type=<span class="java&#45;quote">"checkbox"</span>/&#62;It will be replaced by the actual checkboxes&#8230;
 &#60;/div&#62;</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre>List&#60;<span class="java&#45;object">String</span>&#62; fruits = Arrays.asList(<span class="java&#45;quote">"apple"</span>, <span class="java&#45;quote">"strawberry"</span>, <span class="java&#45;quote">"watermelon"</span>); 
 form.add(<span class="java&#45;keyword">new</span> CheckBoxMultipleChoice(<span class="java&#45;quote">"checkGroup"</span>, <span class="java&#45;keyword">new</span> ListModel&#60;<span class="java&#45;object">String</span>&#62;(<span class="java&#45;keyword">new</span>  
-								 ArrayList&#60;<span class="java&#45;object">String</span>&#62;()), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-checkbox.png"></img><p class="paragraph"/>This component can be attached to a &#60;div&#62; tag or to a &#60;span&#62; tag. No specific content is required for this tag as it will be populated with the actual checkboxes. Since this component allows multiple selection, its model object is a list. In the example above we have used model class <code>org.apache.wicket.model.util.ListModel</code> which is specifically designed to wrap a List object.<p class="paragraph"/>By default CheckBoxMultipleChoice inserts a &#60;br/&#62; tag as suffix after each option. We can configure both the suffix and the prefix used by the component with the setPrefix and setSuffix methods.<p class="paragraph"/>When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in paragraph 9.4:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;div wicket:id=<span class="java&#45;quote">"checkGroup"</span>&#62;
+								 ArrayList&#60;<span class="java&#45;object">String</span>&#62;()), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-checkbox.png"></img><p class="paragraph"/>This component can be attached to a &#60;div&#62; tag or to a &#60;span&#62; tag. No specific content is required for this tag as it will be populated with the actual checkboxes. Since this component allows multiple selection, its model object is a list. In the example above we have used model class <code>org.apache.wicket.model.util.ListModel</code> which is specifically designed to wrap a List object.<p class="paragraph"/>By default CheckBoxMultipleChoice inserts a &#60;br/&#62; tag as suffix after each option. We can configure both the suffix and the prefix used by the component with the setPrefix and setSuffix methods.<p class="paragraph"/>When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in <a href="../guide/single.html#modelsforms_5" class="guide">paragraph 11.5</a>:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;div wicket:id=<span class="java&#45;quote">"checkGroup"</span>&#62;
 		&#60;input type=<span class="java&#45;quote">"checkbox"</span>/&#62;It will be replaced by actual checkboxes&#8230;
 &#60;/div&#62;</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre>Person john = <span class="java&#45;keyword">new</span> Person(<span class="java&#45;quote">"John"</span>, <span class="java&#45;quote">"Smith"</span>);
 Person bob = <span class="java&#45;keyword">new</span> Person(<span class="java&#45;quote">"Bob"</span>, <span class="java&#45;quote">"Smith"</span>);
@@ -232,6 +232,7 @@
 form.add(<span class="java&#45;keyword">new</span> RadioChoice(<span class="java&#45;quote">"radioGroup"</span>, Model.of(<span class="java&#45;quote">""</span>), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-radiobutton.png"></img><p class="paragraph"/>Just like CheckBoxMultipleChoice, this component provides the setPrefix and setSuffix methods to configure the prefix and suffix for our options and it supports IChoiceRender as well. In addition, RadioChoice provides the wantOnSelectionChangedNotifications() method to notify the web server when the selected option changes (this is the same method seen for DropDownChoice in paragraph 9.4).
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/modelsforms.html">&lt;&lt; <strong>11</strong><span>Wicket models and forms</span></a></div>
@@ -258,7 +259,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_12.html
===================================================================
--- guide/pages/forms2_12.html	(revision 1675105)
+++ guide/pages/forms2_12.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.12 Selecting multiple values with ListMultipleChoices and Palette - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -231,7 +231,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_13.html
===================================================================
--- guide/pages/forms2_13.html	(revision 1675105)
+++ guide/pages/forms2_13.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.13 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -194,7 +194,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_2.html
===================================================================
--- guide/pages/forms2_2.html	(revision 1675105)
+++ guide/pages/forms2_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.2 Form validation and feedback messages - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,11 +163,11 @@
                 
 
 <h2 id="forms2_2">12.2 Form validation and feedback messages</h2>
-<p class="paragraph"/>A basic example of a validation rule is to make a field required. In paragraph 9.3.2 we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.<p class="paragraph"/>A validator is an implementation of the <code>org.apache.wicket.validation.IValidator</code> interface and the <code>FormComponent</code> has a version of method add which takes as input a reference of this interface.<p class="paragraph"/>For example if we want to use a text field to insert an email address, we could use the built-in validator  EmailAddressValidator to ensure that the inserted input will respect the email format <a href="http://en.wikipedia.org/wiki/Email_address" target="blank">local-part@domain</a> :<p class="paragraph"/><div class="code"><pre>TextField email = <span class="java&#45;keyword">new</span> TextField(<span class="java&#45;quote">"email"</span>);
-email.add(EmailAddressValidator.getInstance());</pre></div><p class="paragraph"/>Wicket comes with a set of built-in validators that should suit most of our needs. We will see them in paragraph 10.2.3.<p class="paragraph"/><h3>Feedback messages and localization</h3><p class="paragraph"/>Wicket generates a feedback message for each field that doesn't satisfy one of its validation rules. For example the message generated when a required field is left empty is the following<p class="paragraph"/><code>Field '&#60;label&#62;' is required.</code><p class="paragraph"/>&#60;label&#62; is the value of the label model set on a FormComponent with method setLabel(IModel &#60;String&#62; model). If such model is not provided, component id will be used as the default value.<p class="paragraph"/>The entire infrastructure of feedback messages is built on top of the Java internationalization (I18N) support and it uses <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html" target="blank">resource bundles</a> to store messages.<p class="paragraph"/><blockquote class="note">
-The topics of internationalization will be covered in chapter 12. For now we will give just few notions needed to understand the examples from this chapter.
-</blockquote><p class="paragraph"/>By default resource bundles are stored into properties files but we can easily configure other sources as described later in paragraph 12.4.5.<p class="paragraph"/>Default feedback messages (like the one above for required fields) are stored in the file Application. properties placed inside Wicket the org.apache.wicket package. Opening this file we can find the key and the localized value of the message:<p class="paragraph"/><code>Required=Field '$&#123;label&#125;' is required.</code><p class="paragraph"/>We can note the key (Required in our case) and the label parameter written in the <a href="http://en.wikipedia.org/wiki/Expression_Language" target="blank">expression language</a> (${label}). Scrolling down this file we can also find the message used by the Email AddressValidator:<p class="paragraph"/><code>EmailAddressValidator=The value of '${label}' is not a valid email address.</code><p class="paragraph"/>By default FormComponent provides 3 parameters for feedback message: input (the value that failed validation), label and name (this later is the id of the component).<p class="paragraph"/><blockquote class="warning">
-Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used in paragraph 10.2.5)
+<p class="paragraph"/>A basic example of a validation rule is to make a field required. In <a href="../guide/single.html#modelsforms_3" class="guide">paragraph 11.3</a> we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.<p class="paragraph"/>A validator is an implementation of the <code>org.apache.wicket.validation.IValidator</code> interface and the <code>FormComponent</code> has a version of method add which takes as input a reference of this interface.<p class="paragraph"/>For example if we want to use a text field to insert an email address, we could use the built-in validator  EmailAddressValidator to ensure that the inserted input will respect the email format <a href="http://en.wikipedia.org/wiki/Email_address" target="blank">local-part@domain</a> :<p class="paragraph"/><div class="code"><pre>TextField email = <span class="java&#45;keyword">new</span> TextField(<span class="java&#45;quote">"email"</span>);
+email.add(EmailAddressValidator.getInstance());</pre></div><p class="paragraph"/>Wicket comes with a set of built-in validators that should suit most of our needs. We will see them later in this chapter.<p class="paragraph"/><h3>Feedback messages and localization</h3><p class="paragraph"/>Wicket generates a feedback message for each field that doesn't satisfy one of its validation rules. For example the message generated when a required field is left empty is the following<p class="paragraph"/><code>Field '&#60;label&#62;' is required.</code><p class="paragraph"/>&#60;label&#62; is the value of the label model set on a FormComponent with method setLabel(IModel &#60;String&#62; model). If such model is not provided, component id will be used as the default value.<p class="paragraph"/>The entire infrastructure of feedback messages is built on top of the Java internationalization (I18N) support and it uses <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html" target="blank">resource bundles</a> to store messages.<p class="paragraph"/><blockquote class="note">
+The topics of internationalization will be covered in <a href="../guide/single.html#i18n" class="guide">chapter 14</a>. For now we will give just few notions needed to understand the examples from this chapter.
+</blockquote><p class="paragraph"/>By default resource bundles are stored into properties files but we can easily configure other sources as described later in <a href="../guide/single.html#i18n_2" class="guide">paragraph 14.2</a>.<p class="paragraph"/>Default feedback messages (like the one above for required fields) are stored in the file Application. properties placed inside Wicket the org.apache.wicket package. Opening this file we can find the key and the localized value of the message:<p class="paragraph"/><code>Required=Field '$&#123;label&#125;' is required.</code><p class="paragraph"/>We can note the key (Required in our case) and the label parameter written in the <a href="http://en.wikipedia.org/wiki/Expression_Language" target="blank">expression language</a> (${label}). Scrolling down this file we can also find the message used by the Email AddressValidator:<p class="paragraph"/><code>EmailAddressValidator=The value of '${label}' is not a valid email address.</code><p class="paragraph"/>By default FormComponent provides 3 parameters for feedback message: input (the value that failed validation), label and name (this later is the id of the component).<p class="paragraph"/><blockquote class="warning">
+Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used later in this chapter)
 </blockquote><p class="paragraph"/><h3>Displaying feedback messages and filtering them</h3><p class="paragraph"/>To display feedback messages we must use component <code>org.apache.wicket.markup.html.panel.FeedbackPanel</code>. This component automatically reads all the feedback messages generated during form validation and displays them with an unordered list:<p class="paragraph"/><div class="code"><pre>&#60;ul class=<span class="java&#45;quote">"feedbackPanel"</span>&#62; 
 	&#60;li class=<span class="java&#45;quote">"feedbackPanelERROR"</span>&#62; 
 		&#60;span class=<span class="java&#45;quote">"feedbackPanelERROR"</span>&#62;Field 'Username' is required.&#60;/span&#62; 
@@ -176,7 +176,7 @@
 <ul class="star">
 <li><strong class="bold">ComponentFeedbackMessageFilter</strong>: shows only messages coming from a specific component.</li>
 <li><strong class="bold">ContainerFeedbackMessageFilter</strong>: shows only messages coming from a specific container or from any of its children components.</li>
-<li><strong class="bold">ErrorLevelFeedbackMessageFilter</strong>: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed in paragraph 10.2.6.</li>
+<li><strong class="bold">ErrorLevelFeedbackMessageFilter</strong>: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed later in this chapter.</li>
 </ul><p class="paragraph"/>These filters are intended to be used when there are more than one feedback panel (or more than one form) in the same page. We can pass a filter to a feedback panel via its constructor or using the setFilter method. Custom filters can be created implementing the IFeedbackMessageFilter interface. An example of custom filter is illustrated later in this paragraph.<p class="paragraph"/><h3>Built-in validators</h3><p class="paragraph"/>Wicket already provides a number of built-in validators ready to be used. The following table is a short reference where validators are listed along with a brief description of what they do. The default feedback message used by each of them is reported as well:<p class="paragraph"/><h4>EmailAddressValidator</h4><p class="paragraph"/>Checks if input respects the format local-part&#64;domain.<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The value of '${label}' is not a valid email address.</code><p class="paragraph"/><h4>UrlValidator</h4><p class="paragraph"/>Checks if input is a valid URL. We can specify in the constructor which protocols are allowed (http://, https://, and ftp://).<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The value of '${label}' is not a valid URL.</code><p class="paragraph"/><h4>DateValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get date validators to check if a date is bigger than a lower bound (method minimum(Date min)), smaller than a upper bound (method maximum(Date max)) or inside a range (method range(Date min, Date max)).<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' is less than the minimum of ${minimum}.</code><p class="paragraph"/><code>The value of '${label}' is larger than the maximum of ${maximum}.</code><p class="paragraph"/><code>The value of '${label}' is not between ${minimum} and ${maximum}.</code><p class="paragraph"/><h4>RangeValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get validators to check if a value is bigger than a given lower bound (method minimum(T min)), smaller than a upper bound (method maximum(T max)) or inside a range (method range(T min,T max)).<p class="paragraph"/>The type of the value is a generic subtype of java.lang.Comparable and must implement Serializable interface.<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' must be at least ${minimum}.</code><p class="paragraph"/><code>The value of '${label}' must be at most ${maximum}.</code><p class="paragraph"/><code>The value of '${label}' must be between ${minimum} and ${maximum}.</code><p class="paragraph"/><h4>StringValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get validators to check if the length of a string value is bigger then a given lower bound (method minimumLength (int min)), smaller then a given upper bound (method maximumLength (int max)) or within a given range (method lengthBetween(int min, int max)).<p class="paragraph"/>To accept only string values consisting of exactly n characters, we must use method exactLength(int length).<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' is shorter than the minimum of ${minimum} characters.</code><p class="paragraph"/><code>The value of '${label}' is longer than the maximum of ${maximum} characters.</code><p class="paragraph"/><code>The value of '${label}' is not between ${minimum} and ${maximum} characters long.</code><p class="paragraph"/><code>The value of '${label}' is not exactly ${exact} characters long.</code><p class="paragraph"/><h4>CreditCardValidator</h4><p class="paragraph"/>Checks if input is a valid credit card number. This validator supports some of the most popular credit cards (like “American Express", "MasterCard", “Visa” or “Diners Club”).<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The credit card number is invalid.</code><p class="paragraph"/><h4>EqualPasswordInputValidator</h4><p class="paragraph"/>This validator checks if two password fields have the same value.<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>${label0} and ${label1} must be equal.</code><p class="paragraph"/><h3>Overriding standard feedback messages with custom bundles</h3><p class="paragraph"/>If we don't like the default validation feedback messages, we can override them providing custom properties files. In these files we can write our custom messages using the same keys of the messages we want to override. For example if we wanted to override the default message for invalid email addresses, our properties file would contain a line like this:<p class="paragraph"/><code>EmailAddressValidator=Man, your email address is not good!</code><p class="paragraph"/>As we will see in the next chapter, Wicket searches for custom properties files in various positions inside the application's class path, but for now we will consider just the properties file placed next to our application class. The name of this file must be equal to the name of our application class:<p class="paragraph"/><img border="0" class="center" src="../img/custom-properties-file.png"></img><p class="paragraph"/>The example project OverrideMailMessage overrides email validator's message with a new one which also reports the value that failed validation:<p class="paragraph"/><code>EmailAddressValidator=The value '${input}' inserted for field '${label}' is not a valid email address.</code><p class="paragraph"/><img border="0" class="center" src="../img/validation-error-message.png"></img><p class="paragraph"/><h3>Creating custom validators</h3><p class="paragraph"/>If our web application requires a complex validation logic and built-in validators are not enough, we can  implement our own custom validators. For example (project UsernameCustomValidator) suppose we are working on the registration page of our site where users can create their profile choosing their username. Our registration form should validate the new username checking if it was already chosen by another user. In a situation like this we may need to implement a custom validator that queries a specific data source to check if a username is already in use.<p class="paragraph"/>For the sake of simplicity, the validator of our example will check the given username against a fixed list of three existing usernames.<p class="paragraph"/>A custom validator must simply implement interface IValidator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class UsernameValidator <span class="java&#45;keyword">implements</span> IValidator&#60;<span class="java&#45;object">String</span>&#62; &#123;
 	List&#60;<span class="java&#45;object">String</span>&#62; existingUsernames = Arrays.asList(<span class="java&#45;quote">"bigJack"</span>, <span class="java&#45;quote">"anonymous"</span>, <span class="java&#45;quote">"mrSmith"</span>);<p class="paragraph"/>	<span class="java&#45;keyword">public</span> void validate(IValidatable&#60;<span class="java&#45;object">String</span>&#62; validatable) &#123;
 		<span class="java&#45;object">String</span> chosenUserName = validatable.getValue();<p class="paragraph"/>		<span class="java&#45;keyword">if</span>(existingUsernames.contains(chosenUserName))&#123;
@@ -255,7 +255,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_3.html
===================================================================
--- guide/pages/forms2_3.html	(revision 1675105)
+++ guide/pages/forms2_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.3 Input value conversion - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 	<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> convertToString(Pattern value, Locale locale) &#123;
 		<span class="java&#45;keyword">return</span> value.toString();
 	&#125;
-&#125;</pre></div><p class="paragraph"/>Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in chapter 12.<p class="paragraph"/>Once we have implemented our custom converter, we must override method newConverterLocator() inside our application class and tell it to add our new converter to the default set:<p class="paragraph"/><div class="code"><pre>@Override
+&#125;</pre></div><p class="paragraph"/>Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in <a href="../guide/single.html#i18n" class="guide">paragraph 14</a>.<p class="paragraph"/>Once we have implemented our custom converter, we must override method newConverterLocator() inside our application class and tell it to add our new converter to the default set:<p class="paragraph"/><div class="code"><pre>@Override
 	<span class="java&#45;keyword">protected</span> IConverterLocator newConverterLocator() &#123;
 		ConverterLocator defaultLocator = <span class="java&#45;keyword">new</span> ConverterLocator();<p class="paragraph"/>		defaultLocator.set(Pattern.class, <span class="java&#45;keyword">new</span> RegExpPatternConverter());<p class="paragraph"/>		<span class="java&#45;keyword">return</span> defaultLocator;
 	&#125;</pre></div><p class="paragraph"/>Finally, in the home page of the project we build the form which displays (with a flash message) the tokens obtained splitting the string with the given pattern:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class HomePage <span class="java&#45;keyword">extends</span> WebPage &#123;
@@ -226,6 +226,7 @@
 </blockquote>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/modelsforms.html">&lt;&lt; <strong>11</strong><span>Wicket models and forms</span></a></div>
@@ -252,7 +253,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_4.html
===================================================================
--- guide/pages/forms2_4.html	(revision 1675105)
+++ guide/pages/forms2_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.4 Validation with JSR 303 - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -214,7 +214,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_5.html
===================================================================
--- guide/pages/forms2_5.html	(revision 1675105)
+++ guide/pages/forms2_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.5 Submit form with an IFormSubmittingComponent - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -239,7 +239,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_6.html
===================================================================
--- guide/pages/forms2_6.html	(revision 1675105)
+++ guide/pages/forms2_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.6 Nested forms - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -201,7 +201,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_7.html
===================================================================
--- guide/pages/forms2_7.html	(revision 1675105)
+++ guide/pages/forms2_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.7 Multi-line text input - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_8.html
===================================================================
--- guide/pages/forms2_8.html	(revision 1675105)
+++ guide/pages/forms2_8.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.8 File upload - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -230,7 +230,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/forms2_9.html
===================================================================
--- guide/pages/forms2_9.html	(revision 1675105)
+++ guide/pages/forms2_9.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>12.9 Creating complex form components with FormComponentPanel - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="forms2_9">12.9 Creating complex form components with FormComponentPanel</h2>
-<p class="paragraph"/>In chapter 3.2.2 we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.<p class="paragraph"/>While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow.<p class="paragraph"/>This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the <code>org.apache.wicket.markup.html.form.FormComponentPanel</code> component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent).<p class="paragraph"/>A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data.<p class="paragraph"/>To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).<p class="paragraph"/>The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the <a href="http://en.wikipedia.org/wiki/International_System_of_Units" target="blank">International System of Units</a> , so it makes perfect sense to store temperatures expressed with this unit of measurement.<p class="paragraph"/>However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user.<p class="paragraph"/>In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.<p class="paragraph"/>Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:<p class="paragraph"/><div class="code"><pre>&#60;html&#62;
+<p class="paragraph"/>In <a href="../guide/single.html#layout_2" class="guide">chapter 5.2.2</a> we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.<p class="paragraph"/>While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow.<p class="paragraph"/>This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the <code>org.apache.wicket.markup.html.form.FormComponentPanel</code> component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent).<p class="paragraph"/>A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data.<p class="paragraph"/>To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).<p class="paragraph"/>The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the <a href="http://en.wikipedia.org/wiki/International_System_of_Units" target="blank">International System of Units</a> , so it makes perfect sense to store temperatures expressed with this unit of measurement.<p class="paragraph"/>However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user.<p class="paragraph"/>In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.<p class="paragraph"/>Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:<p class="paragraph"/><div class="code"><pre>&#60;html&#62;
 &#60;head&#62;
 &#60;/head&#62;
 &#60;body&#62;
@@ -190,7 +190,7 @@
 		add(userDegree=<span class="java&#45;keyword">new</span> TextField&#60;<span class="java&#45;object">Double</span>&#62;(<span class="java&#45;quote">"registeredTemperature"</span>, <span class="java&#45;keyword">new</span> 
                            Model&#60;<span class="java&#45;object">Double</span>&#62;()));
 		userDegree.setType(<span class="java&#45;object">Double</span>.class);
-	&#125;</pre></div><p class="paragraph"/>Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in chapter 12). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius.<p class="paragraph"/>In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object.<p class="paragraph"/>Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:<p class="paragraph"/><div class="code"><pre>// continued example
+	&#125;</pre></div><p class="paragraph"/>Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in <a href="../guide/single.html#i18n" class="guide">paragraph 14</a>). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius.<p class="paragraph"/>In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object.<p class="paragraph"/>Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:<p class="paragraph"/><div class="code"><pre>// continued example
 	@Override
 	<span class="java&#45;keyword">protected</span> void convertInput() &#123;
 		<span class="java&#45;object">Double</span> userDegreeVal = userDegree.getConvertedInput();
@@ -215,6 +215,7 @@
 &#125;</pre></div><p class="paragraph"/>Since our component does not directly receive the user input, convertInput() must read this value from the inner text field using FormComponent's getConvertedInput() method which returns the input value already converted to the type specified for the component (Double in our case). Once we have the user input we convert it to kelvin degrees and we use the resulting value to set the converted input for our custom component (using method setConvertedInput(T convertedInput)).<p class="paragraph"/>Method onBeforeRender() is responsible for synchronizing the model of the inner textfield with the model of our custom component. To do this we retrieve the model object of the custom component with the getDefaultModelObject() method, then we convert it to the temperature scale adopted by the user and finally we use this value to set the model object of the text field.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/modelsforms.html">&lt;&lt; <strong>11</strong><span>Wicket models and forms</span></a></div>
@@ -241,7 +242,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/helloWorld_1.html
===================================================================
--- guide/pages/helloWorld_1.html	(revision 1675105)
+++ guide/pages/helloWorld_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>4.1 Wicket distribution and modules - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/helloWorld_2.html
===================================================================
--- guide/pages/helloWorld_2.html	(revision 1675105)
+++ guide/pages/helloWorld_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>4.2 Configuration of Wicket applications - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -230,7 +230,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/helloWorld_3.html
===================================================================
--- guide/pages/helloWorld_3.html	(revision 1675105)
+++ guide/pages/helloWorld_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>4.3 The HomePage class - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -217,7 +217,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/helloWorld_4.html
===================================================================
--- guide/pages/helloWorld_4.html	(revision 1675105)
+++ guide/pages/helloWorld_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>4.4 Wicket Links - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -220,7 +220,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/helloWorld_5.html
===================================================================
--- guide/pages/helloWorld_5.html	(revision 1675105)
+++ guide/pages/helloWorld_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>4.5 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -194,7 +194,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/i18n_1.html
===================================================================
--- guide/pages/i18n_1.html	(revision 1675105)
+++ guide/pages/i18n_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>14.1 Localization - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="i18n_1">14.1 Localization</h2>
-<p class="paragraph"/>As we have seen in chapter 10, the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the &#60;ApplicationClassName&#62;.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.<p class="paragraph"/><blockquote class="note">
+<p class="paragraph"/>As we have seen in <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a>, the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the &#60;ApplicationClassName&#62;.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.<p class="paragraph"/><blockquote class="note">
 Providing a full description of Java support for i18n is clearly out of the scope of this document. If you need more informations about this topic you can find them in the JavaDocs and in the official <a href="http://docs.oracle.com/javase/tutorial/i18n/index.html" target="blank">i18n tutorial</a> .
 </blockquote><p class="paragraph"/><h3>Class Locale and ResourceBundle</h3><p class="paragraph"/>Class java.util.Locale represents a specific country or language of the world and is used in Java to retrieve other locale-dependent informations like numeric and date formats, the currency in use in a country and so on. Such kind of informations are accessed through special entities called resource bundles which are implemented by class <code>java.util.ResourceBundle</code>. Every resource bundle is identified by a full name which is built using four parameters: a base name (which is required), a language code, a country code and a variant (which are all optional). These three optional parameters are provided by an instance of Locale with its three corresponding getter methods: getLanguage(), getCountry() and getVariant(). Parameter language code is a lowercase ISO 639 2-letter code (like zh for Chinese, de for German and so on) while country code is an uppercase ISO 3166 2-letter code (like CN for China, DE for Germany and so on). The final full name will have the following structure (NOTE: tokens inside squared brackets are optional):<p class="paragraph"/><div class="code"><pre>&#60;base name&#62;&#91; <em class="italic">&#60;language code&#62;&#91;</em> &#60;COUNTRY_CODE&#62;&#91;_&#60;variant code&#62;&#93;&#93;&#93;</pre></div><p class="paragraph"/>For example a bundle with MyBundle as base name and localized for Mandarin Chinese (language code zh, country code CH, variant cmn) will have MyBundle_zh_CH_cmn as full name. A base name can be a fully qualified class name, meaning that it can include a package name before the actual base name. The specified package will be the container of the given bundle. For example if we use org.foo.MyBundle as base name, the bundle named MyBundle will be searched inside package org.foo. The actual base name (MyBundle in our example) will be used to build the full name of the bundle following the same rules seen above.
 <code>ResourceBundle</code> is an abstract factory class, hence it exposes a number of factory methods named  getBundle to load a concrete bundle. Without going into too much details we can say that a bundle corresponds to a file in the classpath. To find a file for a given bundle, getBundle needs first to generate an ordered list of candidate bundle names. These names are the set of all possible full names for a given bundle. For example if we have org.foo.MyBundle as base name and the current locale is the one seen before for Mandarin Chinese, the candidate names will be:
@@ -172,9 +172,10 @@
 <li>org.foo.MyBundle_zh_CH</li>
 <li>org.foo.MyBundle_zh</li>
 <li>org.foo.MyBundle</li>
-</ol><p class="paragraph"/>The list of these candidate names is generated starting from the most specific one and subtracting an optional parameter at each step. The last name of the list corresponds to the default resource bundle which is the most general name and is equal to the base name. Once that getBundle has generated the list of candidate names, it will iterate over them to find the first one for which is possible to load a class or a properties file. The class must be a subclass of <code>ResourceBundle</code> having as class name the full name used in the current iteration. If such a class is not found, getBundle will try to locate a properties file having a file name equals to the current full name (Java will automatically append extension .properties to the full name). For example given the resource bundle of the previous example, Java will search first for class org.foo.MyBundle_zh_CH_cmn and then for file MyBundle_zh_CH_cmn.properties inside package org.foo. If no file is found for any of the candidate names, a MissingResourceException will be thrown. Bundles contains local-dependent string resources identified by a key that is unique in the given bundle. So once we have obtained a valid bundle we can access these objects with method getString (String key).<p class="paragraph"/>As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In chapter 10 we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In paragraph 12.4 we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
+</ol><p class="paragraph"/>The list of these candidate names is generated starting from the most specific one and subtracting an optional parameter at each step. The last name of the list corresponds to the default resource bundle which is the most general name and is equal to the base name. Once that getBundle has generated the list of candidate names, it will iterate over them to find the first one for which is possible to load a class or a properties file. The class must be a subclass of <code>ResourceBundle</code> having as class name the full name used in the current iteration. If such a class is not found, getBundle will try to locate a properties file having a file name equals to the current full name (Java will automatically append extension .properties to the full name). For example given the resource bundle of the previous example, Java will search first for class org.foo.MyBundle_zh_CH_cmn and then for file MyBundle_zh_CH_cmn.properties inside package org.foo. If no file is found for any of the candidate names, a MissingResourceException will be thrown. Bundles contains local-dependent string resources identified by a key that is unique in the given bundle. So once we have obtained a valid bundle we can access these objects with method getString (String key).<p class="paragraph"/>As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a> we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a> we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/repeaters.html">&lt;&lt; <strong>13</strong><span>Displaying multiple items with repeaters</span></a></div>
@@ -201,7 +202,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/i18n_2.html
===================================================================
--- guide/pages/i18n_2.html	(revision 1675105)
+++ guide/pages/i18n_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>14.2 Localization in Wicket - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -173,12 +173,12 @@
 &#60;!DOCTYPE properties SYSTEM <span class="xml&#45;quote">"http://www.oracle.com/webfolder/technetwork/jsc/dtd/properties.dtd"</span>&#62;
 <span class="xml&#45;tag">&#60;properties&#62;</span>
 	<span class="xml&#45;tag">&#60;entry key=<span class="xml&#45;quote">"greetingMessage"</span>&#62;</span>欢迎光临本网站！<span class="xml&#45;tag">&#60;/entry&#62;</span>
-<span class="xml&#45;tag">&#60;/properties&#62;</span></pre></div><p class="paragraph"/>To use XML bundles in Wicket we don't need to put in place any additional configuration. The only rule we have to respect with these files is to use properties.xml as extension while their base name follows the same rules seen so far for bundle names.<p class="paragraph"/><h3>Reading bundles from code</h3><p class="paragraph"/>Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in paragraph 12.4. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:<p class="paragraph"/><div class="code"><pre>getString(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/><h3>Localization of bundles in Wicket</h3><p class="paragraph"/>In chapter 10 we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:<p class="paragraph"/><div class="code"><pre>greetingMessage=Welcome to the site!</pre></div><p class="paragraph"/>Along with this file we can also find a bundle for German (WicketApplication_de.properties) and another one in XML format for simplified Chinese (WicketApplication_zh.properties.xml). The example project consists of a single page (HomePage.java) displaying the greeting message. The current locale can be changed with a drop-down list and the possible options are English (the default one), German and simplified Chinese:<p class="paragraph"/><img border="0" class="center" src="../img/locale-german.png"></img><p class="paragraph"/>The label displaying the greeting message has a custom read-only model which returns the message with method getString. The initialization code for this label is this:<p class="paragraph"/><div class="code"><pre>AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62; model = <span class="java&#45;keyword">new</span> AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62;() &#123;			
+<span class="xml&#45;tag">&#60;/properties&#62;</span></pre></div><p class="paragraph"/>To use XML bundles in Wicket we don't need to put in place any additional configuration. The only rule we have to respect with these files is to use properties.xml as extension while their base name follows the same rules seen so far for bundle names.<p class="paragraph"/><h3>Reading bundles from code</h3><p class="paragraph"/>Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a>. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:<p class="paragraph"/><div class="code"><pre>getString(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/><h3>Localization of bundles in Wicket</h3><p class="paragraph"/>In <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a> we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:<p class="paragraph"/><div class="code"><pre>greetingMessage=Welcome to the site!</pre></div><p class="paragraph"/>Along with this file we can also find a bundle for German (WicketApplication_de.properties) and another one in XML format for simplified Chinese (WicketApplication_zh.properties.xml). The example project consists of a single page (HomePage.java) displaying the greeting message. The current locale can be changed with a drop-down list and the possible options are English (the default one), German and simplified Chinese:<p class="paragraph"/><img border="0" class="center" src="../img/locale-german.png"></img><p class="paragraph"/>The label displaying the greeting message has a custom read-only model which returns the message with method getString. The initialization code for this label is this:<p class="paragraph"/><div class="code"><pre>AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62; model = <span class="java&#45;keyword">new</span> AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62;() &#123;			
 			@Override
 			<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> getObject() &#123;
 				<span class="java&#45;keyword">return</span> getString(<span class="java&#45;quote">"greetingMessage"</span>);			
 			&#125;
-&#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"greetingMessage"</span>, model));</pre></div><p class="paragraph"/>Class <code>org.apache.wicket.model.AbstractReadOnlyModel</code> is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph 12.6.<p class="paragraph"/>The rest of the code of the home page builds the stateless form and the drop-down menu used to change the locale.<p class="paragraph"/><div class="code"><pre>List&#60;Locale&#62; locales = Arrays.asList(Locale.ENGLISH, Locale.CHINESE, Locale.GERMAN);
+&#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"greetingMessage"</span>, model));</pre></div><p class="paragraph"/>Class <code>org.apache.wicket.model.AbstractReadOnlyModel</code> is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph <a href="../guide/single.html#i18n_5" class="guide">paragraph 14.5</a>.<p class="paragraph"/>The rest of the code of the home page builds the stateless form and the drop-down menu used to change the locale.<p class="paragraph"/><div class="code"><pre>List&#60;Locale&#62; locales = Arrays.asList(Locale.ENGLISH, Locale.CHINESE, Locale.GERMAN);
 <span class="java&#45;keyword">final</span> DropDownChoice&#60;Locale&#62; changeLocale = 
              <span class="java&#45;keyword">new</span> DropDownChoice&#60;Locale&#62;(<span class="java&#45;quote">"changeLocale"</span>, <span class="java&#45;keyword">new</span> Model&#60;Locale&#62;(), locales);<p class="paragraph"/>StatelessForm form = <span class="java&#45;keyword">new</span> StatelessForm(<span class="java&#45;quote">"form"</span>)&#123;
 	@Override
@@ -218,7 +218,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/i18n_3.html
===================================================================
--- guide/pages/i18n_3.html	(revision 1675105)
+++ guide/pages/i18n_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>14.3 Bundles lookup algorithm - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -169,13 +169,13 @@
 form.add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"anotherLabel"</span>,<span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"labelValue"</span>)));
 add(form);</pre></div><p class="paragraph"/>Page bundle:<p class="paragraph"/><div class="code"><pre>labelValue=Default value
 anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel
-form.anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel inside form</pre></div><p class="paragraph"/>With the code and the bundle above, the label inside the form will display the value 'Value for anotherLabel inside form'.<p class="paragraph"/><h3>Package bundles</h3><p class="paragraph"/>If no one of the previous steps can find a resource for the given key, the algorithm will look for package bundles. These bundles have <code>wicket-package</code> as base name and they can be placed in one of the package of our application:<p class="paragraph"/><img border="0" class="center" src="../img/package-bundles.png"></img><p class="paragraph"/>Packages are traversed starting from the one containing the component requesting for a resource and going up to the root package.<p class="paragraph"/><h3>Bundles for feedback messages</h3><p class="paragraph"/>The algorithm described so far applies to feedback messages as well. In case of validation errors, the component that has caused the error will be considered as the component which the string resource is relative to. Furthermore, just like application class and components, validators can have their own bundles placed next to their class and having as base name their class name. This allows us to distribute validators along with the messages they use to report errors:<p class="paragraph"/><img border="0" class="center" src="../img/validator-with-bundle.png"></img><p class="paragraph"/>Validator's resource bundles have the lowest priority in the lookup algorithm. They can be overwritten by resource bundles of components, packages and application class.<p class="paragraph"/><h3>Extending the default lookup algorithm</h3><p class="paragraph"/>Wicket implements the default lookup algorithm using the strategy pattern1. The concrete strategies are abstracted with the interface <code>org.apache.wicket.resource.loader.IStringResourceLoader</code>. By default Wicket uses the following implementations of <code>IStringResourceLoader</code> (sorted by execution order):
+form.anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel inside form</pre></div><p class="paragraph"/>With the code and the bundle above, the label inside the form will display the value 'Value for anotherLabel inside form'.<p class="paragraph"/><h3>Package bundles</h3><p class="paragraph"/>If no one of the previous steps can find a resource for the given key, the algorithm will look for package bundles. These bundles have <code>wicket-package</code> as base name and they can be placed in one of the package of our application:<p class="paragraph"/><img border="0" class="center" src="../img/package-bundles.png"></img><p class="paragraph"/>Packages are traversed starting from the one containing the component requesting for a resource and going up to the root package.<p class="paragraph"/><h3>Bundles for feedback messages</h3><p class="paragraph"/>The algorithm described so far applies to feedback messages as well. In case of validation errors, the component that has caused the error will be considered as the component which the string resource is relative to. Furthermore, just like application class and components, validators can have their own bundles placed next to their class and having as base name their class name. This allows us to distribute validators along with the messages they use to report errors:<p class="paragraph"/><img border="0" class="center" src="../img/validator-with-bundle.png"></img><p class="paragraph"/>Validator's resource bundles have the lowest priority in the lookup algorithm. They can be overwritten by resource bundles of components, packages and application class.<p class="paragraph"/><h3>Extending the default lookup algorithm</h3><p class="paragraph"/>Wicket implements the default lookup algorithm using the strategy pattern. The concrete strategies are abstracted with the interface <code>org.apache.wicket.resource.loader.IStringResourceLoader</code>. By default Wicket uses the following implementations of <code>IStringResourceLoader</code> (sorted by execution order):
 <ol>
 <li><strong class="bold">ComponentStringResourceLoader:</strong> implements most of the default algorithm. It searches for a given resource across bundles from the container hierarchy, from class hierarchy and from the given component.</li>
 <li><strong class="bold">PackageStringResourceLoader:</strong> searches into package bundles.</li>
 <li><strong class="bold">ClassStringResourceLoader:</strong> searches into bundles of a given class. By default the target class is the application class.</li>
 <li><strong class="bold">ValidatorStringResourceLoader:</strong> searches for resources into validator's bundles. A list of validators is provided by the form component that failed validation.</li>
-<li><strong class="bold">InitializerStringResourceLoader:</strong> this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in paragraph 15.4.</li>
+<li><strong class="bold">InitializerStringResourceLoader:</strong> this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in <a href="../guide/single.html#advanced_3" class="guide">paragraph 17.3</a>.</li>
 </ol><p class="paragraph"/>Developer can customize lookup algorithm removing default resource loaders or adding custom implementations to the list of the resource loaders in use. This task can be accomplished using method getStringResourceLoaders of setting interface <code>org.apache.wicket.settings.IResourceSettings</code>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
@@ -213,7 +213,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/i18n_4.html
===================================================================
--- guide/pages/i18n_4.html	(revision 1675105)
+++ guide/pages/i18n_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>14.4 Localization of component's choices - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -183,8 +183,8 @@
 green=Green
 red=Red
 blue=Blue
-yellow=Yellow</pre></div><p class="paragraph"/>German bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Wahlen sie eine farbe
-green=Grun
+yellow=Yellow</pre></div><p class="paragraph"/>German bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Wählen Sie eine Farbe
+green=Grün
 red=Rot
 blue=Blau
 yellow=Gelb</pre></div><p class="paragraph"/>Italian bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Scegli un colore
@@ -191,9 +191,10 @@
 green=Verde
 red=Rosso
 blue=Blu
-yellow=Giallo</pre></div><p class="paragraph"/>Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Chose one ”) used for null value. The resource key for this resource is 'null' or '&#60;component id&#62;.null' if we want to make it component-specific.
+yellow=Giallo</pre></div><p class="paragraph"/>Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Select a color ”) used for null value. The resource key for this resource is 'null' or '&#60;component id&#62;.null' if we want to make it component-specific.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/repeaters.html">&lt;&lt; <strong>13</strong><span>Displaying multiple items with repeaters</span></a></div>
@@ -220,7 +221,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/i18n_5.html
===================================================================
--- guide/pages/i18n_5.html	(revision 1675105)
+++ guide/pages/i18n_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>14.5 Internationalization and Models - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="i18n_5">14.5 Internationalization and Models</h2>
-<p class="paragraph"/>Internationalization is another good chance to taste the power of models. Wicket provides two built-in models to better integrate our components with string resources: they are ResourceModel and StringResourceModel.<p class="paragraph"/><h3>ResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.ResourceModel</code> acts just like the read-only model we have implemented in paragraph 12.3.4. It simply retrieves a string resource corresponding to a given key:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel <span class="java&#45;keyword">for</span> key 'greetingMessage'
+<p class="paragraph"/>Internationalization is another good chance to taste the power of models. Wicket provides two built-in models to better integrate our components with string resources: they are ResourceModel and StringResourceModel.<p class="paragraph"/><h3>ResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.ResourceModel</code> acts just like the read-only model we have implemented in <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a>. It simply retrieves a string resource corresponding to a given key:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel <span class="java&#45;keyword">for</span> key 'greetingMessage'
 <span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/>We can also specify a default value to use if the requested resource is not found:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel with a <span class="java&#45;keyword">default</span> value
 <span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"notExistingResource"</span>, <span class="java&#45;quote">"Resource not found."</span>);</pre></div><p class="paragraph"/><h3>StringResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.StringResourceModel</code> allows to work with complex and dynamic string resources containing parameters and property expressions. The basic constructor of this model takes in input a resource key and another model. This further model can be used by both the key and the related resource to specify dynamic values with property expressions. For example let's say that we are working on an e-commerce site which has a page where users can see an overview of their orders. To handle the state of user's orders we will use the following bean and enum (the code is from project StringResourceModelExample):<p class="paragraph"/>Bean:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class Order <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> Date orderDate;
 	<span class="java&#45;keyword">private</span> ORDER_STATUS status;<p class="paragraph"/>	<span class="java&#45;keyword">public</span> Order(Date orderDate, ORDER_STATUS status) &#123;
@@ -186,6 +186,7 @@
 StringResourceModel srm = <span class="java&#45;keyword">new</span> StringResourceModel(<span class="java&#45;quote">"orderStatus.delay"</span>, <span class="java&#45;keyword">null</span>, propertyModel, 3);</pre></div><p class="paragraph"/>Bundle:<p class="paragraph"/><div class="code"><pre>orderStatus.delay=Your order submitted on $&#123;0&#125; has been delayed by &#123;1&#125; days.</pre></div><p class="paragraph"/>One further parameter we can specify when we build a StringResourceModel is the component that must be used by the lookup algorithm. Normally this parameter is not relevant, but if we need to use a particular bundle owned by a component not considered by the algorithm, we can specify this component as second parameter. If we pass all possible parameters to StringResourceModel's constructor we obtain something like this:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">new</span> StringResourceModel(<span class="java&#45;quote">"myKey"</span>, myComponent, myModel, param1, param2, param3,...);</pre></div>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/repeaters.html">&lt;&lt; <strong>13</strong><span>Displaying multiple items with repeaters</span></a></div>
@@ -212,7 +213,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/i18n_6.html
===================================================================
--- guide/pages/i18n_6.html	(revision 1675105)
+++ guide/pages/i18n_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>14.6 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/jee_1.html
===================================================================
--- guide/pages/jee_1.html	(revision 1675105)
+++ guide/pages/jee_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>19.1 Integrating Wicket with EJB - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -208,7 +208,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/jee_2.html
===================================================================
--- guide/pages/jee_2.html	(revision 1675105)
+++ guide/pages/jee_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>19.2 Integrating Wicket with Spring - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -214,7 +214,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/jee_3.html
===================================================================
--- guide/pages/jee_3.html	(revision 1675105)
+++ guide/pages/jee_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>19.3 JSR-330 annotations - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -164,10 +164,12 @@
 
 <h2 id="jee_3">19.3 JSR-330 annotations</h2>
 <p class="paragraph"/>Spring (and Guice) users can use standard <a href="http://jcp.org/en/jsr/detail?id=330" target="blank">JSR-330</a> annotations to wire their dependencies. This will make their code more interoperable with other containers that support this standard:<p class="paragraph"/><div class="code"><pre>//inject a bean specifying its name with JSR&#45;330 annotations
-  <code>Inject </code>Named(<span class="java&#45;quote">"anotherName"</span>)
+  @Inject 
+  @Named(<span class="java&#45;quote">"anotherName"</span>)
   <span class="java&#45;keyword">private</span> EnterpriseMessage enterpriseMessage;</pre></div>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/ajax.html">&lt;&lt; <strong>18</strong><span>Working with AJAX</span></a></div>
@@ -194,7 +196,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/jee_4.html
===================================================================
--- guide/pages/jee_4.html	(revision 1675105)
+++ guide/pages/jee_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>19.4 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/jsintegration_1.html
===================================================================
--- guide/pages/jsintegration_1.html	(revision 1675105)
+++ guide/pages/jsintegration_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>16.1 What we want to do... - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/jsintegration_2.html
===================================================================
--- guide/pages/jsintegration_2.html	(revision 1675105)
+++ guide/pages/jsintegration_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>16.2 ...and how we will do it - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -198,7 +198,7 @@
 &#125;<p class="paragraph"/>@Override
 <span class="java&#45;keyword">public</span> &#60;Date&#62; IConverter&#60;Date&#62; getConverter(<span class="java&#45;object">Class</span>&#60;Date&#62; type) &#123;
 	<span class="java&#45;keyword">return</span> (IConverter&#60;Date&#62;) dateConverter;
-&#125;</pre></div><p class="paragraph"/>The first thing to do inside onInitialize is to ensure that our component will have a markup id for its related text field. This is done invoking setOutputMarkupId(true).<p class="paragraph"/>Next, JQueryDateField tries to retrieve the date format and the ISO language code that must be used as initialization parameters. This is done using class <code>ResourceModel</code> which searches for a given resource in the available bundles. If no value is found for date format or for ISO language code, default values will be used ('mm/dd/yy' and 'en-GB').<p class="paragraph"/>To generate the relative URL for calendar icon, we load it as package resource reference and then we use <code>Component</code>'s method urlFor to get the URL value (we have seen this method in paragraph 7.3.2).<p class="paragraph"/>The last configuration instruction executed inside onInitialize is the instantiation of the custom converter used by our component. This converter is an instance of the built-in class <code>org.apache.wicket.datetime.PatternDateConvert</code> and must use the previously retrieved date format to perform conversion operations. Now to tell our component to use this converter we must return it overriding <code>FormComponent</code>'s method <code>getConverter</code>.<p class="paragraph"/><h3>Header contributor code</h3><p class="paragraph"/>The rest of the code of our custom component is inside method <code>renderHeader</code>, which is responsible for adding to page header the bundled JQuery library, the three files from JQuery UI distribution, the custom file JQDatePicker.js and the invocation of function <code>initJQDatepicker</code>:<p class="paragraph"/><div class="code"><pre>@Override
+&#125;</pre></div><p class="paragraph"/>The first thing to do inside onInitialize is to ensure that our component will have a markup id for its related text field. This is done invoking setOutputMarkupId(true).<p class="paragraph"/>Next, JQueryDateField tries to retrieve the date format and the ISO language code that must be used as initialization parameters. This is done using class <code>ResourceModel</code> which searches for a given resource in the available bundles. If no value is found for date format or for ISO language code, default values will be used ('mm/dd/yy' and 'en-GB').<p class="paragraph"/>To generate the relative URL for calendar icon, we load it as package resource reference and then we use <code>Component</code>'s method urlFor to get the URL value (we have seen this method in <a href="../guide/single.html#requestProcessing_3" class="guide">paragraph 9.3.2</a>).<p class="paragraph"/>The last configuration instruction executed inside onInitialize is the instantiation of the custom converter used by our component. This converter is an instance of the built-in class <code>org.apache.wicket.datetime.PatternDateConvert</code> and must use the previously retrieved date format to perform conversion operations. Now to tell our component to use this converter we must return it overriding <code>FormComponent</code>'s method <code>getConverter</code>.<p class="paragraph"/><h3>Header contributor code</h3><p class="paragraph"/>The rest of the code of our custom component is inside method <code>renderHeader</code>, which is responsible for adding to page header the bundled JQuery library, the three files from JQuery UI distribution, the custom file JQDatePicker.js and the invocation of function <code>initJQDatepicker</code>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void renderHead(IHeaderResponse response) &#123;
 	<span class="java&#45;keyword">super</span>.renderHead(response);<p class="paragraph"/>	//<span class="java&#45;keyword">if</span> component is disabled we don't have to load the JQueryUI datepicker
 	<span class="java&#45;keyword">if</span>(!isEnabledInHierarchy())
@@ -224,10 +224,11 @@
 &#125;</pre></div><p class="paragraph"/>If component is disabled the calendar icon must be hidden and no datepicker must be displayed. That's why <code>renderHeader</code> is skipped if component is not enabled.<p class="paragraph"/>To get a reference to the bundled JQuery library we used the JavaScript setting interface <code>IJavaScriptLibrarySettings</code> and its method <code>getJQueryReference</code>.<p class="paragraph"/>In the last part of <code>renderHeader</code> we build the string to invoke function <code>initJQDatepicker</code> using the values obtained inside onInitialize. Unfortunately the date format used by JQuery UI is different from the one adopted in Java so we have to convert it before building the JavaScript code. This init script is rendered into header section using a <code>OnLoadHeaderItem</code> to ensure that it will be executed after all the other scripts have been loaded.<p class="paragraph"/><blockquote class="note">
 If we add more than one instance of our custom component to a single page, static resources are rendered to the header section just once. Wicket automatically checks if a static resource is already referenced by a page and if so, it will not render it again.<p class="paragraph"/>This does not apply to the init script which is dynamically generated and is rendered for every instance of the component.
 </blockquote><p class="paragraph"/><blockquote class="warning">
-Our datepicker is not ready yet to be used with AJAX. In chapter 16 we will see how to modify it to make it AJAX-compatible.
+Our datepicker is not ready yet to be used with AJAX. In <a href="../guide/single.html#ajax" class="guide">chapter 18</a> we will see how to modify it to make it AJAX-compatible.
 </blockquote>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/resources.html">&lt;&lt; <strong>15</strong><span>Resource management with Wicket</span></a></div>
@@ -254,7 +255,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/jsintegration_3.html
===================================================================
--- guide/pages/jsintegration_3.html	(revision 1675105)
+++ guide/pages/jsintegration_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>16.3 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_1.html
===================================================================
--- guide/pages/keepControl_1.html	(revision 1675105)
+++ guide/pages/keepControl_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.1 Hiding or disabling a component - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_10.html
===================================================================
--- guide/pages/keepControl_10.html	(revision 1675105)
+++ guide/pages/keepControl_10.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.10 Surrounding existing markup with Border - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -229,7 +229,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_11.html
===================================================================
--- guide/pages/keepControl_11.html	(revision 1675105)
+++ guide/pages/keepControl_11.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.11 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_2.html
===================================================================
--- guide/pages/keepControl_2.html	(revision 1675105)
+++ guide/pages/keepControl_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.2 Modifing tag attributes - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -195,7 +195,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_3.html
===================================================================
--- guide/pages/keepControl_3.html	(revision 1675105)
+++ guide/pages/keepControl_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.3 Generating tag attribute 'id' - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_4.html
===================================================================
--- guide/pages/keepControl_4.html	(revision 1675105)
+++ guide/pages/keepControl_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.4 Creating in-line panels with WebMarkupContainer - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_5.html
===================================================================
--- guide/pages/keepControl_5.html	(revision 1675105)
+++ guide/pages/keepControl_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.5 Working with markup fragments - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -215,7 +215,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_6.html
===================================================================
--- guide/pages/keepControl_6.html	(revision 1675105)
+++ guide/pages/keepControl_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.6 Adding header contents to the final page - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -212,7 +212,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_7.html
===================================================================
--- guide/pages/keepControl_7.html	(revision 1675105)
+++ guide/pages/keepControl_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.7 Using stub markup in our pages/panels - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_8.html
===================================================================
--- guide/pages/keepControl_8.html	(revision 1675105)
+++ guide/pages/keepControl_8.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.8 How to render component body only - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -208,7 +208,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/keepControl_9.html
===================================================================
--- guide/pages/keepControl_9.html	(revision 1675105)
+++ guide/pages/keepControl_9.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>6.9 Hiding decorating elements with the wicket:enclosure tag - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -202,7 +202,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/layout_1.html
===================================================================
--- guide/pages/layout_1.html	(revision 1675105)
+++ guide/pages/layout_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>5.1 Header, footer, left menu, content, etc... - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -200,7 +200,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/layout_2.html
===================================================================
--- guide/pages/layout_2.html	(revision 1675105)
+++ guide/pages/layout_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>5.2 Here comes the inheritance! - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -218,7 +218,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/layout_3.html
===================================================================
--- guide/pages/layout_3.html	(revision 1675105)
+++ guide/pages/layout_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>5.3 Divide et impera! - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -277,7 +277,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/layout_4.html
===================================================================
--- guide/pages/layout_4.html	(revision 1675105)
+++ guide/pages/layout_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>5.4 Markup inheritance with the wicket:extend tag - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -253,7 +253,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/layout_5.html
===================================================================
--- guide/pages/layout_5.html	(revision 1675105)
+++ guide/pages/layout_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>5.5 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/maven_1.html
===================================================================
--- guide/pages/maven_1.html	(revision 1675105)
+++ guide/pages/maven_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>26.1 Switching Wicket to DEPLOYMENT mode - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,12 +163,12 @@
                 
 
 <h2 id="maven_1">26.1 Switching Wicket to DEPLOYMENT mode</h2>
-<p class="paragraph"/>As pointed out in the note at page 9, Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:<p class="paragraph"/><div class="code"><pre>&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;
+<p class="paragraph"/>As pointed out in the note in <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2</a>, Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:<p class="paragraph"/><div class="code"><pre>&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;
 &#42;&#42;&#42; WARNING: Wicket is running in DEVELOPMENT mode.              &#42;&#42;&#42;
 &#42;&#42;&#42;                               ^^^^^^^^^^^                    &#42;&#42;&#42;
 &#42;&#42;&#42; Do NOT deploy to your live server(s) without changing <span class="java&#45;keyword">this</span>.  &#42;&#42;&#42;
 &#42;&#42;&#42; See Application&#35;getConfigurationType() <span class="java&#45;keyword">for</span> more information. &#42;&#42;&#42;
-&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;</pre></div><p class="paragraph"/>As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in three different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:<p class="paragraph"/><div class="code"><pre>&#60;filter&#62;      
+&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;</pre></div><p class="paragraph"/>As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in four different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:<p class="paragraph"/><div class="code"><pre>&#60;filter&#62;      
 	&#60;filter&#45;name&#62;wicket.MyApp&#60;/filter&#45;name&#62;
 	&#60;filter&#45;class&#62;org.apache.wicket.protocol.http.WicketFilter&#60;/filter&#45;class&#62;
 	&#60;init&#45;param&#62;
@@ -182,9 +182,10 @@
 &#60;/filter&#62;</pre></div><p class="paragraph"/>The additional parameter is written in bold. The same parameter can be also expressed as context parameter:<p class="paragraph"/><div class="code"><pre>&#60;context&#45;param&#62;
     &#60;param&#45;name&#62;configuration&#60;/param&#45;name&#62;
     &#60;param&#45;value&#62;deployment&#60;/param&#45;value&#62;
-&#60;/context&#45;param&#62;</pre></div><p class="paragraph"/>The third way to set the running mode is using system property wicket.configuration. This parameter can be specified in the command line that starts up the server:<p class="paragraph"/><div class="code"><pre>java &#45;Dwicket.configuration=deployment ...</pre></div><p class="paragraph"/>Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
+&#60;/context&#45;param&#62;</pre></div><p class="paragraph"/>The third way to set the running mode is using system property wicket.configuration. This parameter can be specified in the command line that starts up the server:<p class="paragraph"/><div class="code"><pre>java &#45;Dwicket.configuration=deployment ...</pre></div><p class="paragraph"/>The last option is to set it in your Java code (e.g. in the init-method of your WebApplication):<p class="paragraph"/><div class="code"><pre>setConfigurationType(RuntimeConfigurationType.DEPLOYMENT);</pre></div><p class="paragraph"/>Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/internals.html">&lt;&lt; <strong>25</strong><span>Wicket Internals</span></a></div>
@@ -211,7 +212,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/maven_2.html
===================================================================
--- guide/pages/maven_2.html	(revision 1675105)
+++ guide/pages/maven_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>26.2 Creating a Wicket project from scratch and importing it into our favourite IDE - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -167,7 +167,7 @@
 In order to follow the instructions of this paragraph you must have Maven installed on your system. The installation of Maven is out of the scope of this guide but you can easily find an extensive documentation about it on Internet.
 Another requirement is a good Internet connection (a flat ADSL is enough) because Maven needs to connect to its central repository to download the required dependencies. 
 </blockquote><p class="paragraph"/>
-<h3>From Maven to our IDE</h3><p class="paragraph"/>Wicket project and its dependencies are managed using Maven1. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
+<h3>From Maven to our IDE</h3><p class="paragraph"/>Wicket project and its dependencies are managed using Maven. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
 The main step to create such a project is to run the command which generates project's structure and its artifacts. If we are not familiar with Maven or we simply don't want to type this command by hand, we can use the utility form on Wicket site at <a href="http://wicket.apache.org/start/quickstart.html" target="blank">http://wicket.apache.org/start/quickstart.html</a> :<p class="paragraph"/><img border="0" class="center" src="../img/quickstart-webpage.png"></img><p class="paragraph"/>Here we have to specify the root package of our project (GroupId), the project name (ArtifactId) and which version of Wicket we want to use (Version).
 Once we have run the resulting command in the OS shell, we will have a new folder with the same name of the project (i.e the ArtifactId). Inside this folder we can find a file called pom.xml. This is the main file used by Maven to manage our project. For example, using “org.wicketTutorial” as GroupId and “MyProject” as ArtifactId, we would obtain the following artifacts:<p class="paragraph"/><div class="code"><pre>.&#77;yProject
         |   pom.xml
@@ -222,7 +222,7 @@
 </blockquote><p class="paragraph"/><blockquote class="note">
 If we modify the pom.xml file (for example adding further dependencies) we must regenerate project's artifacts and refresh the project (F5 key) to reflect changes into Eclipse.
 </blockquote><p class="paragraph"/><h3>Speeding up development with plugins.</h3><p class="paragraph"/>Now that we have our project loaded into our IDE we could start coding our components directly by hand. However it would be a shame to not leverage the free and good Wicket plugins available for our IDE. The following is a brief overview of the most widely used plugins for each of the three main IDEs considered so far.<p class="paragraph"/><strong class="bold">NetBeans</strong>
-NetBeans offers Wicket support thought 'NetBeans Plugin for Wicket' hosted at <a href="http://java.net/projects/nbwicketsupport/" target="blank">http://java.net/projects/nbwicketsupport/</a> . This plugin is released under CDDL-1.0 license. 
+NetBeans offers Wicket support through 'NetBeans Plugin for Wicket' hosted at <a href="http://plugins.netbeans.org/plugin/3586/wicket-1-4-support" target="blank">http://plugins.netbeans.org/plugin/3586/wicket-1-4-support</a> . This plugin is released under CDDL-1.0 license. 
 You can  find a nice introduction guide to this plugin at <a href="http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html" target="blank">http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html</a> .<p class="paragraph"/><strong class="bold">Intellj IDEA</strong>
 For JetBrain IDEA we can use WicketForge plugin, hosted at Google Code <a href="http://code.google.com/p/wicketforge/" target="blank">http://code.google.com/p/wicketforge/</a> . The plugin is released under ASF 2.0 license.<p class="paragraph"/><strong class="bold">Eclipse</strong>
 With Eclipse we can install one of the plugins that supports Wicket. As of the writing of this document, the most popular is probably Qwickie, available in the Eclipse Marketplace and hosted on Google Code at <a href="http://code.google.com/p/qwickie/" target="blank">http://code.google.com/p/qwickie/</a> .
@@ -229,6 +229,7 @@
 QWickie is released under ASF 2.0 license.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/internals.html">&lt;&lt; <strong>25</strong><span>Wicket Internals</span></a></div>
@@ -255,7 +256,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_1.html
===================================================================
--- guide/pages/modelsforms_1.html	(revision 1675105)
+++ guide/pages/modelsforms_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.1 What is a model? - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -177,10 +177,11 @@
 		<span class="java&#45;keyword">return</span> <span class="java&#45;keyword">new</span> Date().toString();
 	&#125;
 &#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"timeStamp"</span>, timeStampModel));</pre></div><p class="paragraph"/>Even if sometimes writing a custom model could be a good choice to solve a specific problem, Wicket already provides a set of IModel implementations which should fit most of our needs. In the next paragraph we will see a couple of models that allow us to easily integrate JavaBeans with our web applications and in particular with our forms.<p class="paragraph"/><blockquote class="note">
-By default class Component escapes HTML sensitive characters (like '&#60;', '&#62;' or '&#38;') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML <a href="http://en.wikipedia.org/wiki/Character_entity_reference" target="blank">entity</a> (for example '&#60;' becomes '&#38;lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
+By default the class Component escapes HTML sensitive characters (like '&#60;', '&#62;' or '&#38;') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML <a href="http://en.wikipedia.org/wiki/Character_entity_reference" target="blank">entity</a> (for example '&#60;' becomes '&#38;lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
 </blockquote>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/urls.html">&lt;&lt; <strong>10</strong><span>Wicket Links and URL generation</span></a></div>
@@ -207,7 +208,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_2.html
===================================================================
--- guide/pages/modelsforms_2.html	(revision 1675105)
+++ guide/pages/modelsforms_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.2 Models and JavaBeans - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -222,7 +222,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_3.html
===================================================================
--- guide/pages/modelsforms_3.html	(revision 1675105)
+++ guide/pages/modelsforms_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.3 Wicket forms - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -264,7 +264,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_4.html
===================================================================
--- guide/pages/modelsforms_4.html	(revision 1675105)
+++ guide/pages/modelsforms_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.4 Component DropDownChoice - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -208,7 +208,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_5.html
===================================================================
--- guide/pages/modelsforms_5.html	(revision 1675105)
+++ guide/pages/modelsforms_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.5 Model chaining - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -248,7 +248,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_6.html
===================================================================
--- guide/pages/modelsforms_6.html	(revision 1675105)
+++ guide/pages/modelsforms_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.6 Detachable models - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -220,7 +220,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_7.html
===================================================================
--- guide/pages/modelsforms_7.html	(revision 1675105)
+++ guide/pages/modelsforms_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.7 Using more than one model in a component - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -205,7 +205,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_8.html
===================================================================
--- guide/pages/modelsforms_8.html	(revision 1675105)
+++ guide/pages/modelsforms_8.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.8 Use models! - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -203,7 +203,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/modelsforms_9.html
===================================================================
--- guide/pages/modelsforms_9.html	(revision 1675105)
+++ guide/pages/modelsforms_9.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>11.9 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/nativewebsockets_1.html
===================================================================
--- guide/pages/nativewebsockets_1.html	(revision 1675105)
+++ guide/pages/nativewebsockets_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>20.1 How does it work ? - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -195,7 +195,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/nativewebsockets_2.html
===================================================================
--- guide/pages/nativewebsockets_2.html	(revision 1675105)
+++ guide/pages/nativewebsockets_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>20.2 How to use - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -262,7 +262,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/nativewebsockets_3.html
===================================================================
--- guide/pages/nativewebsockets_3.html	(revision 1675105)
+++ guide/pages/nativewebsockets_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>20.3 Client-side APIs - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -202,7 +202,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/nativewebsockets_4.html
===================================================================
--- guide/pages/nativewebsockets_4.html	(revision 1675105)
+++ guide/pages/nativewebsockets_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>20.4 Testing - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -194,7 +194,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/nativewebsockets_5.html
===================================================================
--- guide/pages/nativewebsockets_5.html	(revision 1675105)
+++ guide/pages/nativewebsockets_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>20.5 Differences with Wicket-Atmosphere module. - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/nativewebsockets_6.html
===================================================================
--- guide/pages/nativewebsockets_6.html	(revision 1675105)
+++ guide/pages/nativewebsockets_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>20.6 FAQ - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -194,7 +194,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/pagestoring.html
===================================================================
--- guide/pages/pagestoring.html	(revision 1675105)
+++ guide/pages/pagestoring.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>25.1 Page storing - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -174,7 +174,8 @@
    data : <span class="java&#45;object">byte</span>&#91;&#93;
 &#125;</pre></div><p class="paragraph"/>i.e. this is the serialized page instance (data) plus additional information needed to be able to easily find it later (sessionId, pageId).<p class="paragraph"/>When a <code>SerializedPage</code> has to be stored <code>DefaultPageStore</code> stores it in a application scoped cache ({sessionId, pageId} -&#62; SerializedPage) and additionally gives it to the underlying <code>IDataStore#storeData(sessionId, pageId, data)</code>. The application scoped cache is used as second level cache. Getting a page from it is slower than the http session based cache in <code>PageStoreManager</code> because the page has to be deserialized, but is faster than the underlying <code>IDataStore</code> which stores the page bytes in some persistent store.<p class="paragraph"/>The size of the application scoped cache is configurable via <code>org.apache.wicket.settings.IStoreSettings.setInmemoryCacheSize(int)</code>.<p class="paragraph"/><h3>IDataStore</h3><p class="paragraph"/><code>org.apache.wicket.pageStore.IDataStore</code> is used to persist Wicket pages (as bytes) to a persistent store like e.g. files or databases. The default implementation is <code>org.apache.wicket.pageStore.DiskDataStore</code> which as its name says stores the pages in files. The location of the folder where the files are stored is configurable via <code>org.apache.wicket.settings.IStoreSettings.setFileStoreFolder(File)</code>, by default the web container's work folder is used (ServletContext attribute 'javax.servlet.context.tempdir'). In this folder a sub-folder is created named <code>'applicationName-filestore'</code>. 
 This folder contains a sub-folder for each active http session. This session folder contains a single file named 'data' which contains the bytes for the pages. The size of this 'data' file is configurable via <code>org.apache.wicket.settings.IStoreSettings.setMaxSizePerSession(Bytes)</code>. When this size is exceeded the newly stored files overwrite the oldest ones.<p class="paragraph"/><h3>AsynchronousDataStore</h3><p class="paragraph"/>By default Wicket wraps <code>DiskDataStore</code> with <code>org.apache.wicket.pageStore.AsynchronousDataStore</code>. The role of <code>AsynchronousDataStore</code> is to detach the http worker thread from waiting for the write of the page bytes to the disk.
-To disable it use: <code>org.apache.wicket.settings.IStoreSettings.setAsynchronous(false)</code>. AsynchronousDataStore can delay the storage of pages' bytes for at most <code>org.apache.wicket.settings.IStoreSettings.setAsynchronousQueueCapacity(int)</code> pages. If this capacity is exceeded then the page's bytes are written synchronously to the backing <code>IDataStore</code>.<p class="paragraph"/><h3>DebugDiskDataStore</h3><p class="paragraph"/>Wicket provides an extension of <code>DiskDataStore</code> that can be used to browse the content of the 'data' files created by <code>DiskDataStore</code>. This debug enabled <code>DiskDataStore</code> is automatically setup when wicket-devutils.jar is in the classpath.
+To disable it use: <code>org.apache.wicket.settings.IStoreSettings.setAsynchronous(false)</code>. AsynchronousDataStore can delay the storage of pages' bytes for at most <code>org.apache.wicket.settings.IStoreSettings.setAsynchronousQueueCapacity(int)</code> pages. If this capacity is exceeded then the page's bytes are written synchronously to the backing <code>IDataStore</code>.<p class="paragraph"/><h3>DebugDiskDataStore</h3><p class="paragraph"/>Wicket provides an extension of <code>DiskDataStore</code> that can be used to browse the content of the 'data' files created by <code>DiskDataStore</code>. This extension can be found in wicket-devutils.jar and needs to be enabled in the <code>init</code>-method of your application via 
+<div class="code"><pre>DebugDiskDataStore.register(<span class="java&#45;keyword">this</span>);</pre></div>
 The debug information can be seen at http://host:port/context/wicket/internal/debug/diskDataStore<p class="paragraph"/><h3>HttpSessionDataStore</h3><p class="paragraph"/>In some environments like Google AppEngine it is not allowed to write to the file system and thus <code>DiskDataStore</code> cannot be used. In this case <code>org.apache.wicket.pageStore.memory.HttpSessionDataStore</code> can be used as replacement. This implementation of <code>IDataStore</code> is not persistent and puts all the data in the http session.
 Wicket comes with 2 default eviction strategies to keep the size of the http session reasonable:
 <ul class="star">
@@ -190,9 +191,12 @@
            <span class="java&#45;keyword">return</span>  <span class="java&#45;keyword">new</span> HttpSessionDataStore(pageManagerContext, <span class="java&#45;keyword">new</span> PageNumberEvictionStrategy(20));
        &#125;
    &#125;
-&#125;</pre></div><p class="paragraph"/>
+&#125;</pre></div><p class="paragraph"/><h3>DebugBar</h3><p class="paragraph"/>Further insights which can be valueable during debugging can be retrieved using the <code>org.apache.wicket.devutils.debugbar.DebugBar</code> from wicket-devutils.jar. It's a panel which you simply add:<p class="paragraph"/>Java: 
+<div class="code"><pre>add(<span class="java&#45;keyword">new</span> DebugBar(<span class="java&#45;quote">"debug"</span>));</pre></div><p class="paragraph"/>HTML:
+<div class="code"><pre>&#60;span wicket:id=<span class="java&#45;quote">"debug"</span>/&#62;</pre></div>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/bestpractices.html">&lt;&lt; <strong>24</strong><span>Wicket Best Practices</span></a></div>
@@ -219,7 +223,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/repeaters_1.html
===================================================================
--- guide/pages/repeaters_1.html	(revision 1675105)
+++ guide/pages/repeaters_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>13.1 The RepeatingView Component - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -204,7 +204,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/repeaters_2.html
===================================================================
--- guide/pages/repeaters_2.html	(revision 1675105)
+++ guide/pages/repeaters_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>13.2 The ListView Component - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -211,7 +211,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/repeaters_3.html
===================================================================
--- guide/pages/repeaters_3.html	(revision 1675105)
+++ guide/pages/repeaters_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>13.3 The RefreshingView Component - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -215,7 +215,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/repeaters_4.html
===================================================================
--- guide/pages/repeaters_4.html	(revision 1675105)
+++ guide/pages/repeaters_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>13.4 Pageable repeaters - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="repeaters_4">13.4 Pageable repeaters</h2>
-<p class="paragraph"/>Wicket offers a number of components that should be used when we have to display a big number of  items (for example the results of a select SQL query).<p class="paragraph"/>All these components implement interface <code>org.apache.wicket.markup.html.navigation.paging.IPageable</code> and use interface <code>IDataProvider</code> (placed in package <code>org.apache.wicket.markup.repeater.data</code>) as data source. This interface is designed to support data paging. We will see an example of data paging later in paragraph 11.4.2.<p class="paragraph"/>The methods defined by IDataProvider are the following:
+<p class="paragraph"/>Wicket offers a number of components that should be used when we have to display a big number of  items (for example the results of a select SQL query).<p class="paragraph"/>All these components implement interface <code>org.apache.wicket.markup.html.navigation.paging.IPageable</code> and use interface <code>IDataProvider</code> (placed in package <code>org.apache.wicket.markup.repeater.data</code>) as data source. This interface is designed to support data paging. We will see an example of data paging later in <a href="../guide/single.html#repeaters_4" class="guide">paragraph 13.4.2</a>.<p class="paragraph"/>The methods defined by IDataProvider are the following:
 <ul class="star">
 <li>iterator(long first, long count): returns an iterator over a subset of the entire dataset. The subset starts from the item at position first and includes all the next count items (i.e. it's the closed interval first,first+count).</li>
 <li>size(): gets the size of the entire dataset.</li>
@@ -246,7 +246,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/repeaters_5.html
===================================================================
--- guide/pages/repeaters_5.html	(revision 1675105)
+++ guide/pages/repeaters_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>13.5 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/requestProcessing_1.html
===================================================================
--- guide/pages/requestProcessing_1.html	(revision 1675105)
+++ guide/pages/requestProcessing_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>9.1 Class Application and request processing - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/requestProcessing_2.html
===================================================================
--- guide/pages/requestProcessing_2.html	(revision 1675105)
+++ guide/pages/requestProcessing_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>9.2 Request and Response classes - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/requestProcessing_3.html
===================================================================
--- guide/pages/requestProcessing_3.html	(revision 1675105)
+++ guide/pages/requestProcessing_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>9.3 The &ldquo;director&rdquo; of request processing - RequestCycle - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="requestProcessing_3">9.3 The “director” of request processing - RequestCycle</h2>
-<p class="paragraph"/>Class <code>org.apache.wicket.request.cycle.RequestCycle</code> is the entity in charge of serving a web request. Our application class creates a new <code>RequestCycle</code> on every request with its method <code>createRequestCycle(request, response)</code>.<p class="paragraph"/>Method <code>createRequestCycle</code> is declared as final, so we can't override it to return a custom subclass of <code>RequestCycle</code>. Instead, we must build a request cycle provider implementing interface <code>org.apache.wicket.IRequestCycleProvider</code>, and then we must tell our application class to use it via the <code>setRequestCycleProvider</code> method.<p class="paragraph"/>The current running request cycle can be retrieved at any time by calling its static method <code>RequestCycle.get()</code>. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar <code>get()</code> method is also implemented in classes <code>org.apache.wicket.Application</code> (as we have seen in paragraph 2.2.2) and <code>org.apache.wicket.Session</code> in order to get the application and the session in use by the current thread.<p class="paragraph"/><blockquote class="note">
+<p class="paragraph"/>Class <code>org.apache.wicket.request.cycle.RequestCycle</code> is the entity in charge of serving a web request. Our application class creates a new <code>RequestCycle</code> on every request with its method <code>createRequestCycle(request, response)</code>.<p class="paragraph"/>Method <code>createRequestCycle</code> is declared as final, so we can't override it to return a custom subclass of <code>RequestCycle</code>. Instead, we must build a request cycle provider implementing interface <code>org.apache.wicket.IRequestCycleProvider</code>, and then we must tell our application class to use it via the <code>setRequestCycleProvider</code> method.<p class="paragraph"/>The current running request cycle can be retrieved at any time by calling its static method <code>RequestCycle.get()</code>. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar <code>get()</code> method is also implemented in classes <code>org.apache.wicket.Application</code> (as we have seen in <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2.2</a>) and <code>org.apache.wicket.Session</code> in order to get the application and the session in use by the current thread.<p class="paragraph"/><blockquote class="note">
 The implementation of the get method takes advantage of the standard class <code>java.lang.ThreadLocal</code>. See its JavaDoc for an introduction to local-thread variables.
 </blockquote><p class="paragraph"/>Class <code>org.apache.wicket.Component</code> provides the <code>getRequestCycle()</code> method which is a convenience method that internally invokes <code>RequestCycle.get()</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> RequestCycle getRequestCycle() &#123;
 	<span class="java&#45;keyword">return</span> RequestCycle.get();
@@ -173,8 +173,8 @@
 <ul class="star">
 <li>a page class, via the <code>urlFor(Class&#60;C&#62; pageClass, PageParameters parameters)</code> method</li>
 <li>an IRequestHandler via the <code>urlFor(IRequestHandler handler)</code> method</li>
-<li>a ResourceReference via the <code>urlFor(ResourceReference reference, PageParameters params)</code> method (resource entities will be introduced in chapter 13).</li>
-</ul><p class="paragraph"/>The overloaded <code>urlFor</code> method from above also has a corresponding version that returns an instance of <code>org.apache.wicket.request.Url</code> instead of a <code>CharSequence</code>. This version has the prefix 'map' in its name (i.e. it has <code>mapUrlFor</code> as full name).<p class="paragraph"/><h3>Method setResponsePage</h3><p class="paragraph"/>The <code>RequestCycle</code> class contains the implementation of the <code>setResponsePage</code> method we use to redirect a user to a specific page (see paragraph 2.4). The namesake method of class <code>org.apache.wicket.Component</code> is just a convenience method that internally invokes the actual implementation on current request cycle:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> void setResponsePage(<span class="java&#45;keyword">final</span> Page page) &#123;
+<li>a ResourceReference via the <code>urlFor(ResourceReference reference, PageParameters params)</code> method (resource entities will be introduced in <a href="../guide/single.html#resources" class="guide">chapter 15</a>).</li>
+</ul><p class="paragraph"/>The overloaded <code>urlFor</code> method from above also has a corresponding version that returns an instance of <code>org.apache.wicket.request.Url</code> instead of a <code>CharSequence</code>. This version has the prefix 'map' in its name (i.e. it has <code>mapUrlFor</code> as full name).<p class="paragraph"/><h3>Method setResponsePage</h3><p class="paragraph"/>The <code>RequestCycle</code> class contains the implementation of the <code>setResponsePage</code> method we use to redirect a user to a specific page (see <a href="../guide/single.html#helloWorld_4" class="guide">paragraph 4.4</a>). The namesake method of class <code>org.apache.wicket.Component</code> is just a convenience method that internally invokes the actual implementation on current request cycle:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> void setResponsePage(<span class="java&#45;keyword">final</span> Page page) &#123;
 	getRequestCycle().setResponsePage(page);
 &#125;</pre></div><p class="paragraph"/><h3>RequestCycle's hook methods and listeners</h3><p class="paragraph"/>The RequestCycle comes with some hook methods which can be overridden to perform custom actions when request handling reaches a specific stage. These methods are:
 <ul class="star">
@@ -225,7 +225,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/requestProcessing_4.html
===================================================================
--- guide/pages/requestProcessing_4.html	(revision 1675105)
+++ guide/pages/requestProcessing_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>9.4 Session Class - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -172,7 +172,7 @@
 <li><strong class="bold">setAttribute(String name, Serializable value):</strong> creates an attribute identified by the given name. If the session already contains an attribute with the same name, the new value will replace the existing one. The value must be a serializable object.</li>
 <li><strong class="bold">getAttribute(String name):</strong> returns the value of the attribute identified by the given name, or null if the name does not correspond to any attribute.</li>
 <li><strong class="bold">removeAttribute(String name):</strong> removes the attribute identified by the given name.</li>
-</ul><p class="paragraph"/>By default class WebSession will use the underlying http session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().<p class="paragraph"/><h3>Accessing to the HTTP session</h3><p class="paragraph"/>If for any reason we need to directly access to the underlying HttpSession object, we can retrieve it from the current request with the following code:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get()
+</ul><p class="paragraph"/>By default class WebSession will use the underlying HTTP session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().<p class="paragraph"/><h3>Accessing to the HTTP session</h3><p class="paragraph"/>If for any reason we need to directly access to the underlying HttpSession object, we can retrieve it from the current request with the following code:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get()
 		.getRequest()).getContainerRequest().getSession();</pre></div><p class="paragraph"/>Using the raw session object might be necessary if we have to set a session attribute with a particular name without the prefix added by Wicket. Let's say for example that we are working with Tomcat as web server. One of the administrative tools provided by Tomcat is a page listing all the active user sessions of a given web application:<p class="paragraph"/><img border="0" class="center" src="../img/tomcat-admin-sessions.png"></img><p class="paragraph"/>Tomcat allows us to set the values that will be displayed in columns “Guessed locale” and “Guessed User name”. One possible way to do this is to use session attributes named “Locale” and “userName” but we can't create them via Wicket's Session class because they would not have exactly the name required by Tomcat. Instead, we must use the raw HttpSession and set our attributes on it:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get().
 		getRequest()).getContainerRequest().getSession();<p class="paragraph"/>session.setAttribute(<span class="java&#45;quote">"Locale"</span>, <span class="java&#45;quote">"ENGLISH"</span>);
 session.setAttribute(<span class="java&#45;quote">"userName"</span>, <span class="java&#45;quote">"Mr BadGuy"</span>);</pre></div><p class="paragraph"/><h3>Temporary and permanent sessions</h3><p class="paragraph"/>Wicket doesn't need to store data into user session as long as the user visits only stateless pages. Nonetheless, even under these conditions, a temporary session object is created to process each request but it is discarded at the end of the current request. To know if the current session is temporary, we can use the isTemporary() method:<p class="paragraph"/><div class="code"><pre>Session.get().isTemporary();</pre></div><p class="paragraph"/>If a session is not temporary (i.e. it is permanent), it's identified by an unique id which can be read calling the getId() method. This value will be null if the session is temporary.<p class="paragraph"/>Although Wicket is able to automatically recognize when it needs to replace a temporary session with a permanent one, sometimes we may need to manually control this process to make our initially temporary session permanent.<p class="paragraph"/>To illustrate this possible scenario let's consider project BindSessionExample where we have a stateless home page which sets a session attribute inside its constructor and then it redirects the user to another page which displays with a label the session attribute previously created. The code of the two pages is as follows:<p class="paragraph"/>Home page:
@@ -238,7 +238,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/requestProcessing_5.html
===================================================================
--- guide/pages/requestProcessing_5.html	(revision 1675105)
+++ guide/pages/requestProcessing_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>9.5 Exception handling - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -205,7 +205,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/requestProcessing_6.html
===================================================================
--- guide/pages/requestProcessing_6.html	(revision 1675105)
+++ guide/pages/requestProcessing_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>9.6 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,9 +163,10 @@
                 
 
 <h2 id="requestProcessing_6">9.6 Summary</h2>
-<p class="paragraph"/>In this chapter we had a look at how Wicket internally handles a web request. Even if most of the time  we won't need to customize this internal process, knowing how it works is essential to use the framework at 100%.<p class="paragraph"/>Entities like Application and Session will come in handy again when we will tackle the topic of security in chapter 20.
+<p class="paragraph"/>In this chapter we had a look at how Wicket internally handles a web request. Even if most of the time  we won't need to customize this internal process, knowing how it works is essential to use the framework at 100%.<p class="paragraph"/>Entities like Application and Session will come in handy again when we will tackle the topic of security in <a href="../guide/single.html#security" class="guide">chapter 21</a>.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/versioningCaching.html">&lt;&lt; <strong>8</strong><span>Page versioning and caching</span></a></div>
@@ -192,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_1.html
===================================================================
--- guide/pages/resources_1.html	(revision 1675105)
+++ guide/pages/resources_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.1 Static vs dynamic resources - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,9 +163,10 @@
                 
 
 <h2 id="resources_1">15.1 Static vs dynamic resources</h2>
-<p class="paragraph"/>In Wicket a resource is an entity that can interact with the current request and response and It must implement interface <code>org.apache.wicket.request.resource.IResource</code>. This interface defines just method respond(IResource.Attributes attributes) where the nested class IResource. Attributes provides access to request, response and page parameters objects.<p class="paragraph"/>Resources can be static or dynamic. Static resources don't entail any computational effort to be generated and they generally correspond to a resource on the filesystem. On the contrary dynamic resources are generated on the fly when they are requested, following a specific logic coded inside them.<p class="paragraph"/>An example of dynamic resource is the built-in class CaptchaImageResource in package <code>org.apache.wicket.extensions.markup.html.captcha</code> which generates a captcha image each time is rendered.<p class="paragraph"/>As we will see in paragraph 13.6, developers can build custom resources extending base class <code>org.apache.wicket.request.resource.AbstractResource</code>.
+<p class="paragraph"/>In Wicket a resource is an entity that can interact with the current request and response and It must implement interface <code>org.apache.wicket.request.resource.IResource</code>. This interface defines just method respond(IResource.Attributes attributes) where the nested class IResource. Attributes provides access to request, response and page parameters objects.<p class="paragraph"/>Resources can be static or dynamic. Static resources don't entail any computational effort to be generated and they generally correspond to a resource on the filesystem. On the contrary dynamic resources are generated on the fly when they are requested, following a specific logic coded inside them.<p class="paragraph"/>An example of dynamic resource is the built-in class CaptchaImageResource in package <code>org.apache.wicket.extensions.markup.html.captcha</code> which generates a captcha image each time is rendered.<p class="paragraph"/>As we will see in <a href="../guide/single.html#resources_10" class="guide">paragraph 15.10</a>, developers can build custom resources extending base class <code>org.apache.wicket.request.resource.AbstractResource</code>.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/i18n.html">&lt;&lt; <strong>14</strong><span>Internationalization with Wicket</span></a></div>
@@ -192,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_10.html
===================================================================
--- guide/pages/resources_10.html	(revision 1675105)
+++ guide/pages/resources_10.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.10 Custom resources - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="resources_10">15.10 Custom resources</h2>
-<p class="paragraph"/>In Wicket the best way to add dynamic functionalities to our application (such as csv export, a pdf generated on the fly, etc...) is implementing a custom resource. In this paragraph as example of custom resource we will build a basic RSS feeds generator which can be used to publish feeds on our site (project CustomResourceMounting). Instead of generating a RSS feed by hand we will use Rome framework and its utility classes.<p class="paragraph"/>As hinted above in paragraph 13.1, class <code>AbstractResource</code> can be used as base class to implement new resources. This class defines abstract method <code>newResourceResponse</code> which is invoked when the resource is requested. The following is the code of our RSS feeds generator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RSSProducerResource <span class="java&#45;keyword">extends</span> AbstractResource &#123;<p class="paragraph"/>  @Override
+<p class="paragraph"/>In Wicket the best way to add dynamic functionalities to our application (such as csv export, a pdf generated on the fly, etc...) is implementing a custom resource. In this paragraph as example of custom resource we will build a basic RSS feeds generator which can be used to publish feeds on our site (project CustomResourceMounting). Instead of generating a RSS feed by hand we will use Rome framework and its utility classes.<p class="paragraph"/>As hinted above in <a href="../guide/single.html#resources_1" class="guide">paragraph 15.1</a>, class <code>AbstractResource</code> can be used as base class to implement new resources. This class defines abstract method <code>newResourceResponse</code> which is invoked when the resource is requested. The following is the code of our RSS feeds generator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RSSProducerResource <span class="java&#45;keyword">extends</span> AbstractResource &#123;<p class="paragraph"/>  @Override
   <span class="java&#45;keyword">protected</span> ResourceResponse newResourceResponse(Attributes attributes) &#123;
     ResourceResponse resourceResponse = <span class="java&#45;keyword">new</span> ResourceResponse();
     resourceResponse.setContentType(<span class="java&#45;quote">"text/xml"</span>);
@@ -187,6 +187,7 @@
 &#125;</pre></div><p class="paragraph"/>Method <code>newResourceResponse</code> returns an instance of <code>ResourceResponse</code> representing the response generated by the custom resource. Since RSS feeds are based on XML, in the code above we have set the type of the response to text/xml and the text encoding to utf-8.<p class="paragraph"/>To specify the content that will be returned by our resource we must also provide an implementation of inner class <code>WriteCallback</code> which is responsible for writing content data to response's output stream. In our project we used class SyndFeedOutput from Rome framework to write our feed to response. Method <code>getFeed()</code> is just an utility method that generates a sample RSS feed (which is an instance of interface <code>com.sun.syndication.feed.synd.SyndFeed</code>).<p class="paragraph"/>Now that we have our custom resource in place, we can use it in the home page of the project. The easiest way to make a resource available to users is to expose it with link component <code>ResourceLink</code>:<p class="paragraph"/><div class="code"><pre>add(<span class="java&#45;keyword">new</span> ResourceLink(<span class="java&#45;quote">"rssLink"</span>, <span class="java&#45;keyword">new</span> RSSProducerResource()));</pre></div><p class="paragraph"/>In the next paragraphs we will see how to register a resource at application-level and how to mount it to an arbitrary URL.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/i18n.html">&lt;&lt; <strong>14</strong><span>Internationalization with Wicket</span></a></div>
@@ -213,7 +214,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_11.html
===================================================================
--- guide/pages/resources_11.html	(revision 1675105)
+++ guide/pages/resources_11.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.11 Mounting resources - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="resources_11">15.11 Mounting resources</h2>
-<p class="paragraph"/>Just like pages also resources can be mounted to a specific path. Class <code>WebApplication</code> provides method <code>mountResource</code> which is almost identical to <code>mountPage</code> seen in paragraph 8.6.1:<p class="paragraph"/><div class="code"><pre>@Override
+<p class="paragraph"/>Just like pages also resources can be mounted to a specific path. Class <code>WebApplication</code> provides method <code>mountResource</code> which is almost identical to <code>mountPage</code> seen in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6.1</a>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init() &#123;
   <span class="java&#45;keyword">super</span>.init();
   //resource mounted to path /foo/bar
@@ -188,6 +188,7 @@
 &#125;</pre></div>
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/i18n.html">&lt;&lt; <strong>14</strong><span>Internationalization with Wicket</span></a></div>
@@ -214,7 +215,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_12.html
===================================================================
--- guide/pages/resources_12.html	(revision 1675105)
+++ guide/pages/resources_12.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.12 Shared resources - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -202,7 +202,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_13.html
===================================================================
--- guide/pages/resources_13.html	(revision 1675105)
+++ guide/pages/resources_13.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.13 Customizing resource loading - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -206,7 +206,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_14.html
===================================================================
--- guide/pages/resources_14.html	(revision 1675105)
+++ guide/pages/resources_14.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.14 CssHeaderItem and JavaScriptHeaderItem compression - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -233,7 +233,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_15.html
===================================================================
--- guide/pages/resources_15.html	(revision 1675105)
+++ guide/pages/resources_15.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.15 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_2.html
===================================================================
--- guide/pages/resources_2.html	(revision 1675105)
+++ guide/pages/resources_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.2 Resource references - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_3.html
===================================================================
--- guide/pages/resources_3.html	(revision 1675105)
+++ guide/pages/resources_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.3 Package resources - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -178,7 +178,7 @@
 	            <span class="java&#45;keyword">new</span> PackageResourceReference(getClass(), <span class="java&#45;quote">"calendar.jpg"</span>);
 		add(<span class="java&#45;keyword">new</span> Image(<span class="java&#45;quote">"packageResPicture"</span>, resourceReference));
 	&#125;
-&#125;</pre></div><p class="paragraph"/>Wicket will take care of generating a valid URL for file calendar.jpg. URLs for package resources have the following structure:<p class="paragraph"/><code>&#60;path to application root&#62;/wicket/resource/&#60;fully qualified classname&#62;/&#60;resource file name&#62;-&#60;ver-&#60;id&#62;&#62;(.file extension)</code><p class="paragraph"/>In our example the URL for our picture file calendar.jpg is the following:<p class="paragraph"/><code>./wicket/resource/org.wicketTutorial.CustomPanel/calendar-ver-1297887542000.jpg</code><p class="paragraph"/>The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in paragraph 8.6.4.<p class="paragraph"/>The fourth segment is the fully qualified name of the class used to locate the resource and it is the scope of the package resource. In the last segment of the URL we can find the name of the resource (the file name).<p class="paragraph"/>As you can see Wicket has automatically appended to the file name a version identifier (ver-1297887542000). When Wicket runs in DEVELOPMENT mode this identifier contains the timestamp in millisecond indicating the last time the resource file was modified. This can be useful when we are developing our application and resource files are frequently modified. Appending the timestamp to the original name we are sure that our browser will use always the last version of the file and not an old, out of date, cached version.<p class="paragraph"/>When instead Wicket is running in DEPLOYMENT mode, the version identifier will contain the MD5 digest of the file instead of the timestamp. The digest is computed only the first time the resource is requested. This perfectly makes sense as static resources don't change so often when our application runs into production environment and when this appends the application is redeployed.<p class="paragraph"/><blockquote class="note">
+&#125;</pre></div><p class="paragraph"/>Wicket will take care of generating a valid URL for file calendar.jpg. URLs for package resources have the following structure:<p class="paragraph"/><code>&#60;path to application root&#62;/wicket/resource/&#60;fully qualified classname&#62;/&#60;resource file name&#62;-&#60;ver-&#60;id&#62;&#62;(.file extension)</code><p class="paragraph"/>In our example the URL for our picture file calendar.jpg is the following:<p class="paragraph"/><code>./wicket/resource/org.wicketTutorial.CustomPanel/calendar-ver-1297887542000.jpg</code><p class="paragraph"/>The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6.4</a>.<p class="paragraph"/>The fourth segment is the fully qualified name of the class used to locate the resource and it is the scope of the package resource. In the last segment of the URL we can find the name of the resource (the file name).<p class="paragraph"/>As you can see Wicket has automatically appended to the file name a version identifier (ver-1297887542000). When Wicket runs in DEVELOPMENT mode this identifier contains the timestamp in millisecond indicating the last time the resource file was modified. This can be useful when we are developing our application and resource files are frequently modified. Appending the timestamp to the original name we are sure that our browser will use always the last version of the file and not an old, out of date, cached version.<p class="paragraph"/>When instead Wicket is running in DEPLOYMENT mode, the version identifier will contain the MD5 digest of the file instead of the timestamp. The digest is computed only the first time the resource is requested. This perfectly makes sense as static resources don't change so often when our application runs into production environment and when this appends the application is redeployed.<p class="paragraph"/><blockquote class="note">
 Package resources can be localized following the same rules seen for resource bundles and markup files:<p class="paragraph"/><img border="0" class="center" src="../img/package-resource-localization.png"></img><p class="paragraph"/>In the example illustrated in the picture above, if we try to retrieve package resource calendar.jpg when the current locale is set to French, the actual file returned will be calendar_fr.jpg.
 </blockquote><p class="paragraph"/><h3>Responsive images - multiple resource references use in one component</h3><p class="paragraph"/>Since Wicket 7.0.0 the build-in component <code>org.apache.wicket.markup.html.image.Image</code> allows you to add several ResourceReferences via varargs and to provide sizes for each image so that the browser is able to pick the best image source.<p class="paragraph"/><strong class="bold">HTML:</strong>
 <div class="code"><pre>&#8230;
@@ -214,7 +214,7 @@
 ...</pre></div><p class="paragraph"/><strong class="bold">Java Code:</strong>
 <div class="code"><pre>&#8230;
     Video video = <span class="java&#45;keyword">new</span> Video(<span class="java&#45;quote">"video"</span>, <span class="java&#45;keyword">new</span> PackageResourceReference(getClass(),<span class="java&#45;quote">"video.mp4"</span>));
-...</pre></div><p class="paragraph"/><h3>Using package resources with tag &#60;wicket:link&#62;</h3><p class="paragraph"/>In paragraph 8.3 we have used tag &#60;wicket:link&#62; to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:<p class="paragraph"/><div class="code"><pre>&#60;wicket:link&#62;
+...</pre></div><p class="paragraph"/><h3>Using package resources with tag &#60;wicket:link&#62;</h3><p class="paragraph"/>In <a href="../guide/single.html#urls_3" class="guide">paragraph 10.3</a> we have used tag &#60;wicket:link&#62; to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:<p class="paragraph"/><div class="code"><pre>&#60;wicket:link&#62;
    &#60;img src=<span class="java&#45;quote">"icon.png"</span>/&#62;
 &#60;/wicket:link&#62;</pre></div><p class="paragraph"/>In the example above Wicket will populate the attribute src with the URL corresponding to the package resource icon.png. &#60;wicket:link&#62; supports also tag &#60;link&#62; for CSS files and tag &#60;script&#62; for JavaScript files.
 
@@ -246,7 +246,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_4.html
===================================================================
--- guide/pages/resources_4.html	(revision 1675105)
+++ guide/pages/resources_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.4 Adding resources to page header section - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="resources_4">15.4 Adding resources to page header section</h2>
-<p class="paragraph"/>Wicket comes with interface <code>org.apache.wicket.markup.html.IHeaderContributor</code> which allows components and behaviors (which will be introduced later in paragraph 15.1) to contribute to the header section of their page. The only method defined in this interface is <code>renderHead(IHeaderResponse response)</code> where <code>IHeaderResponse</code> is an interface which defines method <code>render(HeaderItem item)</code> to write static resources or free-form text into the header section of the page.<p class="paragraph"/>Header entries are instances of abstract class <code>org.apache.wicket.markup.head.HeaderItem</code>. Wicket provides a set of built-in implementations of this class suited for the most common types of resources. With the exception of <code>PriorityHeaderItem</code>, every implementation of <code>HeaderItem</code> is an abstract factory class:
+<p class="paragraph"/>Wicket comes with interface <code>org.apache.wicket.markup.html.IHeaderContributor</code> which allows components and behaviors (which will be introduced later in <a href="../guide/single.html#advanced_1" class="guide">paragraph 17.1</a>) to contribute to the header section of their page. The only method defined in this interface is <code>renderHead(IHeaderResponse response)</code> where <code>IHeaderResponse</code> is an interface which defines method <code>render(HeaderItem item)</code> to write static resources or free-form text into the header section of the page.<p class="paragraph"/>Header entries are instances of abstract class <code>org.apache.wicket.markup.head.HeaderItem</code>. Wicket provides a set of built-in implementations of this class suited for the most common types of resources. With the exception of <code>PriorityHeaderItem</code>, every implementation of <code>HeaderItem</code> is an abstract factory class:
 <ul class="star">
 <li><strong class="bold">CssHeaderItem:</strong> represents a CSS resource. Factory methods provided by this class are <code>forReference</code> which takes in input a resource reference, <code>forUrl</code> which creates an CSS item from a given URL and <code>forCSS</code> which takes in input an arbitrary CSS string and an optional id value to identify the resource.</li>
 <li><strong class="bold">JavaScriptHeaderItem:</strong> represents a JavaScript resource. Just like <code>CssHeaderItem</code> it provides factory methods <code>forReference</code> and <code>forUrl</code> along with method <code>forScript</code> which takes in input an arbitrary string representing the script and an optional id value to identify the resource. Method <code>forReference</code> also supports boolean parameter <code>defer</code> which renders the namesake attribute in the script tag (<code>defer</code> attribute indicates that our script must be execute only after the page has loaded).</li>
@@ -210,7 +210,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_5.html
===================================================================
--- guide/pages/resources_5.html	(revision 1675105)
+++ guide/pages/resources_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.5 Context-relative resources - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -197,7 +197,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_6.html
===================================================================
--- guide/pages/resources_6.html	(revision 1675105)
+++ guide/pages/resources_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.6 Resource dependencies - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -200,7 +200,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_7.html
===================================================================
--- guide/pages/resources_7.html	(revision 1675105)
+++ guide/pages/resources_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.7 Aggregate multiple resources with resource bundles - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -203,7 +203,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_8.html
===================================================================
--- guide/pages/resources_8.html	(revision 1675105)
+++ guide/pages/resources_8.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.8 Put JavaScript inside page body - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -230,7 +230,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/resources_9.html
===================================================================
--- guide/pages/resources_9.html	(revision 1675105)
+++ guide/pages/resources_9.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15.9 Header contributors positioning - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -197,7 +197,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/security_1.html
===================================================================
--- guide/pages/security_1.html	(revision 1675105)
+++ guide/pages/security_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>21.1 Authentication - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -268,7 +268,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/security_2.html
===================================================================
--- guide/pages/security_2.html	(revision 1675105)
+++ guide/pages/security_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>21.2 Authorizations - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -200,7 +200,7 @@
   &#123;		                
     //Authentication code&#8230;
   &#125;
-&#125;;</pre></div><p class="paragraph"/>By default <code>SimplePageAuthorizationStrategy</code> checks for permissions only on pages. If we want to change this behavior and check also other kinds of components, we must override method <code>isActionAuthorized</code> and implement our custom logic inside it.<p class="paragraph"/><h3>Role-based strategies</h3><p class="paragraph"/>At the end of paragraph 20.1 we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.<p class="paragraph"/>In Wicket roles are simple strings like “BASIC_USER” or “ADMIN” (they don't need to be capitalized) and they are handled with class <code>org.apache.wicket.authroles.authorization.strategies.role.Roles</code>. This class extends standard HashSet collection adding some functionalities to check whether the set contains one or more roles. Class <code>Roles</code> already defines roles Roles.USER and Roles.ADMIN.<p class="paragraph"/>The session class in the following example returns a custom “SIGNED_IN” role for every authenticated user and it adds an Roles.ADMIN role if username is equal to superuser:<p class="paragraph"/><div class="code"><pre>class BasicAuthenticationRolesSession <span class="java&#45;keyword">extends</span> AuthenticatedWebSession &#123;
+&#125;;</pre></div><p class="paragraph"/>By default <code>SimplePageAuthorizationStrategy</code> checks for permissions only on pages. If we want to change this behavior and check also other kinds of components, we must override method <code>isActionAuthorized</code> and implement our custom logic inside it.<p class="paragraph"/><h3>Role-based strategies</h3><p class="paragraph"/>At the end of <a href="../guide/single.html#security_1" class="guide">paragraph 21.1</a> we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.<p class="paragraph"/>In Wicket roles are simple strings like “BASIC_USER” or “ADMIN” (they don't need to be capitalized) and they are handled with class <code>org.apache.wicket.authroles.authorization.strategies.role.Roles</code>. This class extends standard HashSet collection adding some functionalities to check whether the set contains one or more roles. Class <code>Roles</code> already defines roles Roles.USER and Roles.ADMIN.<p class="paragraph"/>The session class in the following example returns a custom “SIGNED_IN” role for every authenticated user and it adds an Roles.ADMIN role if username is equal to superuser:<p class="paragraph"/><div class="code"><pre>class BasicAuthenticationRolesSession <span class="java&#45;keyword">extends</span> AuthenticatedWebSession &#123;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> userName;<p class="paragraph"/>	<span class="java&#45;keyword">public</span> BasicAuthenticationRolesSession(Request request) &#123;
 		<span class="java&#45;keyword">super</span>(request);		
 	&#125;<p class="paragraph"/>	@Override
@@ -214,7 +214,7 @@
 			resultRoles.add(Roles.ADMIN);<p class="paragraph"/>		<span class="java&#45;keyword">return</span> resultRoles;
 	&#125;
 &#125;</pre></div><p class="paragraph"/>Roles can be adopted to apply security restrictions on our pages and components. This can be done  using one of the two built-in authorization strategies that extend super class <code>AbstractRoleAuthorizationStrategyWicket</code>: <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code><p class="paragraph"/>The difference between these two strategies is that <code>MetaDataRoleAuthorizationStrategy</code> handles role-based authorizations with Wicket metadata while <code>AnnotationsRoleAuthorizationStrategy</code> uses Java annotations.<p class="paragraph"/><blockquote class="note">
-Application class <code>AuthenticatedWebApplication</code> already sets <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code> as its own authorization strategies (it uses a compound strategy as we will see in paragraph 20.2).<p class="paragraph"/>The code that we will see in the next examples is for illustrative purpose only. If our application class inherits from <code>AuthenticatedWebApplication</code> we won't need to configure anything to use these two strategies.
+Application class <code>AuthenticatedWebApplication</code> already sets <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code> as its own authorization strategies (it uses a compound strategy as we will see in <a href="../guide/single.html#security_2" class="guide">paragraph 21.2</a>).<p class="paragraph"/>The code that we will see in the next examples is for illustrative purpose only. If our application class inherits from <code>AuthenticatedWebApplication</code> we won't need to configure anything to use these two strategies.
 </blockquote><p class="paragraph"/><h4>Using roles with metadata</h4><p class="paragraph"/>Strategy <code>MetaDataRoleAuthorizationStrategy</code> uses application and components metadata to implement role-based authorizations. The class defines a set of static methods authorize that can be used to specify which roles are allowed to instantiate a component and which roles can perform a given action on a component.<p class="paragraph"/>The following code snippet reports both application and session classes from project <code>MetaDataRolesStrategyExample</code> and illustrates how to use <code>MetaDataRoleAuthorizationStrategy</code> to allow access to a given page (AdminOnlyPage) only to ADMIN role:<p class="paragraph"/><strong class="bold">Application class:</strong><p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class WicketApplication <span class="java&#45;keyword">extends</span> AuthenticatedWebApplication&#123;    		
    @Override
    <span class="java&#45;keyword">public</span> <span class="java&#45;object">Class</span>&#60;? <span class="java&#45;keyword">extends</span> WebPage&#62; getHomePage()&#123;
@@ -255,7 +255,7 @@
    <span class="java&#45;keyword">public</span> void init()&#123;   
       getApplicationSettings().setAccessDeniedPage(
 			MyCustomAccessDeniedPage.class); 
-   &#125;</pre></div><p class="paragraph"/>Just like custom “Page expired” page (see chapter 6.2.5), also custom “Access denied” page must be bookmarkable.<p class="paragraph"/><h4>Using roles with annotations</h4><p class="paragraph"/>Strategy <code>AnnotationsRoleAuthorizationStrategy</code> relies on two built-in annotations to handle role-based authorizations. These annotations are <code>AuthorizeInstantiation</code> and <code>AuthorizeAction</code>. As their names suggest the first annotation specifies which roles are allowed to instantiate the annotated component while the second must be used to indicate which roles are allowed to perform a specific action on the annotated component.<p class="paragraph"/>In the following example we use annotations to make a page accessible only to signed-in users and to enable it only if user has the ADMIN role:<p class="paragraph"/><div class="code"><pre>@AuthorizeInstantiation(<span class="java&#45;quote">"SIGNED_IN"</span>)
+   &#125;</pre></div><p class="paragraph"/>Just like custom “Page expired” page (see <a href="../guide/single.html#versioningCaching_2" class="guide">chapter 8.2.5</a>), also custom “Access denied” page must be bookmarkable.<p class="paragraph"/><h4>Using roles with annotations</h4><p class="paragraph"/>Strategy <code>AnnotationsRoleAuthorizationStrategy</code> relies on two built-in annotations to handle role-based authorizations. These annotations are <code>AuthorizeInstantiation</code> and <code>AuthorizeAction</code>. As their names suggest the first annotation specifies which roles are allowed to instantiate the annotated component while the second must be used to indicate which roles are allowed to perform a specific action on the annotated component.<p class="paragraph"/>In the following example we use annotations to make a page accessible only to signed-in users and to enable it only if user has the ADMIN role:<p class="paragraph"/><div class="code"><pre>@AuthorizeInstantiation(<span class="java&#45;quote">"SIGNED_IN"</span>)
 @AuthorizeAction(action = <span class="java&#45;quote">"ENABLE"</span>, roles = &#123;<span class="java&#45;quote">"ADMIN"</span>&#125;)
 <span class="java&#45;keyword">public</span> class MyPage <span class="java&#45;keyword">extends</span> WebPage &#123;
    //Page class code&#8230;
@@ -303,7 +303,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/security_3.html
===================================================================
--- guide/pages/security_3.html	(revision 1675105)
+++ guide/pages/security_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>21.3 Using HTTPS protocol - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="security_3">21.3 Using HTTPS protocol</h2>
-<p class="paragraph"/>HTTPS is the standard technology adopted on Internet to create a secure communication channel between web applications and their users.<p class="paragraph"/>In Wicket we can easily protect our pages with HTTPS mounting a special request mapper called <code>HttpsMapper</code> and using annotation RequireHttps with those pages we want to serve over this protocol. Both these two entities are in package <code>org.apache.wicket.protocol.https</code>.<p class="paragraph"/>HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation <code>RequireHttps</code>. Most of the times the wrapped mapper will be the root one, just like we saw before for <code>CryptoMapper</code> in paragraph 10.6.<p class="paragraph"/>Another parameter needed to build a <code>HttpsMapper</code> is an instance of class <code>HttpsConfi</code>g. This class allows us to specify which ports must be used for HTTPS and HTTP. By default the port numbers used by these two protocols are respectively 443 and 80.<p class="paragraph"/>The following code is taken from project <code>HttpsProtocolExample</code> and illustrates how to enable HTTPS  in our applications:<p class="paragraph"/><div class="code"><pre>//Application class code&#8230;
+<p class="paragraph"/>HTTPS is the standard technology adopted on Internet to create a secure communication channel between web applications and their users.<p class="paragraph"/>In Wicket we can easily protect our pages with HTTPS mounting a special request mapper called <code>HttpsMapper</code> and using annotation RequireHttps with those pages we want to serve over this protocol. Both these two entities are in package <code>org.apache.wicket.protocol.https</code>.<p class="paragraph"/>HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation <code>RequireHttps</code>. Most of the times the wrapped mapper will be the root one, just like we saw before for <code>CryptoMapper</code> in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6</a>.<p class="paragraph"/>Another parameter needed to build a <code>HttpsMapper</code> is an instance of class <code>HttpsConfi</code>g. This class allows us to specify which ports must be used for HTTPS and HTTP. By default the port numbers used by these two protocols are respectively 443 and 80.<p class="paragraph"/>The following code is taken from project <code>HttpsProtocolExample</code> and illustrates how to enable HTTPS  in our applications:<p class="paragraph"/><div class="code"><pre>//Application class code&#8230;
 @Override
 <span class="java&#45;keyword">public</span> void init()&#123;   
    setRootRequestMapper(<span class="java&#45;keyword">new</span> HttpsMapper(getRootRequestMapper(), 
@@ -216,7 +216,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/security_4.html
===================================================================
--- guide/pages/security_4.html	(revision 1675105)
+++ guide/pages/security_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>21.4 URLs encryption in detail - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -220,7 +220,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/security_5.html
===================================================================
--- guide/pages/security_5.html	(revision 1675105)
+++ guide/pages/security_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>21.5 Package Resource Guard - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -211,7 +211,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/security_6.html
===================================================================
--- guide/pages/security_6.html	(revision 1675105)
+++ guide/pages/security_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>21.6 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/testing_1.html
===================================================================
--- guide/pages/testing_1.html	(revision 1675105)
+++ guide/pages/testing_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>22.1 Utility class WicketTester - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -278,7 +278,7 @@
 //&#8230;
 //execute AJAX behavior, i.e. onUpdate will be invoked 
 tester.executeBehavior(ajaxBehavior));	
-//...</pre></div><p class="paragraph"/><h3>Using a custom servlet context</h3><p class="paragraph"/>In paragraph 13.9 we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project <code>CustomFolder4MarkupExample</code>).<p class="paragraph"/>In order to write testing code for applications that use this kind of customization, we must tell <code>WicketTester</code> which folder to use as webapp root. This is necessary as under test environment we don't have any web server, hence it's impossible for <code>WicketTester</code> to retrieve this parameter from servlet context.<p class="paragraph"/>Webapp root folder can be passed to <code>WicketTester</code>'s constructor as further parameter like we did in the test case of project <code>CustomFolder4MarkupExample</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class TestHomePage&#123;
+//...</pre></div><p class="paragraph"/><h3>Using a custom servlet context</h3><p class="paragraph"/>In <a href="../guide/single.html#resources_13" class="guide">paragraph 15.13</a> we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project <code>CustomFolder4MarkupExample</code>).<p class="paragraph"/>In order to write testing code for applications that use this kind of customization, we must tell <code>WicketTester</code> which folder to use as webapp root. This is necessary as under test environment we don't have any web server, hence it's impossible for <code>WicketTester</code> to retrieve this parameter from servlet context.<p class="paragraph"/>Webapp root folder can be passed to <code>WicketTester</code>'s constructor as further parameter like we did in the test case of project <code>CustomFolder4MarkupExample</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class TestHomePage&#123;
    <span class="java&#45;keyword">private</span> WicketTester tester;<p class="paragraph"/>   @Before
    <span class="java&#45;keyword">public</span> void setUp()&#123;
       //build the path to webapp root folder   
@@ -322,7 +322,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/testing_2.html
===================================================================
--- guide/pages/testing_2.html	(revision 1675105)
+++ guide/pages/testing_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>22.2 Testing Wicket forms - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -242,7 +242,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/testing_3.html
===================================================================
--- guide/pages/testing_3.html	(revision 1675105)
+++ guide/pages/testing_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>22.3 Testing markup with TagTester - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -217,7 +217,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/testing_4.html
===================================================================
--- guide/pages/testing_4.html	(revision 1675105)
+++ guide/pages/testing_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>22.4 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/testingspring_1.html
===================================================================
--- guide/pages/testingspring_1.html	(revision 1675105)
+++ guide/pages/testingspring_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>23.1 Configuration of the runtime environment - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -236,7 +236,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/testingspring_2.html
===================================================================
--- guide/pages/testingspring_2.html	(revision 1675105)
+++ guide/pages/testingspring_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>23.2 Configuration of the JUnit based integration test environment - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -253,7 +253,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/testingspring_3.html
===================================================================
--- guide/pages/testingspring_3.html	(revision 1675105)
+++ guide/pages/testingspring_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>23.3 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/urls_1.html
===================================================================
--- guide/pages/urls_1.html	(revision 1675105)
+++ guide/pages/urls_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10.1 PageParameters - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -218,7 +218,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/urls_2.html
===================================================================
--- guide/pages/urls_2.html	(revision 1675105)
+++ guide/pages/urls_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10.2 Bookmarkable links - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/urls_3.html
===================================================================
--- guide/pages/urls_3.html	(revision 1675105)
+++ guide/pages/urls_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10.3 Automatically creating bookmarkable links with tag wicket:link - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -228,7 +228,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/urls_4.html
===================================================================
--- guide/pages/urls_4.html	(revision 1675105)
+++ guide/pages/urls_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10.4 External links - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/urls_5.html
===================================================================
--- guide/pages/urls_5.html	(revision 1675105)
+++ guide/pages/urls_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10.5 Stateless links - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -204,7 +204,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/urls_6.html
===================================================================
--- guide/pages/urls_6.html	(revision 1675105)
+++ guide/pages/urls_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10.6 Generating structured and clear URLs - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="urls_6">10.6 Generating structured and clear URLs</h2>
-<p class="paragraph"/>Having structured URLs in our site is a basic requirement if we want to build an efficient SEO1 strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.<p class="paragraph"/><h3>Mounting a single page</h3><p class="paragraph"/>With Wicket we can mount a page to a given path in much the same way as we map a servlet filer to a desired path inside file web.xml (see page 9). Using mountPage(String path, Class &#60;T&#62; pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:<p class="paragraph"/><div class="code"><pre>@Override
+<p class="paragraph"/>Having structured URLs in our site is a basic requirement if we want to build an efficient SEO strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.<p class="paragraph"/><h3>Mounting a single page</h3><p class="paragraph"/>With Wicket we can mount a page to a given path in much the same way as we map a servlet filter to a desired path inside file web.xml (see <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2</a>). Using mountPage(String path, Class &#60;T&#62; pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
 	<span class="java&#45;keyword">super</span>.init();
@@ -172,14 +172,14 @@
 &#125;</pre></div><p class="paragraph"/>The path provided to mountPage will be used to generate the URL for any page of the specified class:<p class="paragraph"/><div class="code"><pre>//it will <span class="java&#45;keyword">return</span> <span class="java&#45;quote">"/pageMount"</span>
 RequestCycle.get().urlFor(MountedPage.class);</pre></div><p class="paragraph"/>Under the hood the mountPage method mounts an instance of the request mapper <code>org.apache.wicket.request.mapper.MountedMapper</code> configured for the given path:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> &#60;T <span class="java&#45;keyword">extends</span> Page&#62; void mountPage(<span class="java&#45;keyword">final</span> <span class="java&#45;object">String</span> path,<span class="java&#45;keyword">final</span> <span class="java&#45;object">Class</span>&#60;T&#62; pageClass) &#123;
 	mount(<span class="java&#45;keyword">new</span> MountedMapper(path, pageClass));
-&#125;</pre></div><p class="paragraph"/>Request mappers and the Application's method mount have been introduced in the previous chapter (paragraph 9.3).<p class="paragraph"/><h3>Using parameter placeholders with mounted pages</h3><p class="paragraph"/>The path specified for mounted pages can contain dynamic segments which are populated with the values of the named parameters used to build the page. These segments are declared using special segments called parameter placeholders. Consider the path used in the following example:<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/$&#123;foo&#125;/otherSegm"</span>, MountedPageWithPlaceholder.class);</pre></div><p class="paragraph"/>The path used above is composed by three segments: the first and the last are fixed while the second will be replaced by the value of the named parameter foo that must be provided when the page  MountedPageWithPlaceholder is instantiated:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
+&#125;</pre></div><p class="paragraph"/>Request mappers and the Application's method mount have been introduced in the previous chapter (<a href="../guide/single.html#requestProcessing_3" class="guide">paragraph 9.3</a>).<p class="paragraph"/><h3>Using parameter placeholders with mounted pages</h3><p class="paragraph"/>The path specified for mounted pages can contain dynamic segments which are populated with the values of the named parameters used to build the page. These segments are declared using special segments called parameter placeholders. Consider the path used in the following example:<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/$&#123;foo&#125;/otherSegm"</span>, MountedPageWithPlaceholder.class);</pre></div><p class="paragraph"/>The path used above is composed by three segments: the first and the last are fixed while the second will be replaced by the value of the named parameter foo that must be provided when the page  MountedPageWithPlaceholder is instantiated:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
 pageParameters.add(<span class="java&#45;quote">"foo"</span>, <span class="java&#45;quote">"foo"</span>);<p class="paragraph"/>setResponsePage(MountedPageWithPlaceholder.class, pageParameters)</pre></div><p class="paragraph"/>Generated URL:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/pageMount/foo/otherSegm</pre></div><p class="paragraph"/>On the contrary if we manually insert an URL like '&#60;web app path&#62;/pageMount/bar/otherSegm', we can read value 'bar' retrieving the named parameter foo inside our page.<p class="paragraph"/>Place holders can be declared as optional using the '#' character in place of '$':<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/&#35;&#123;foo&#125;/otherSegm"</span>, MountedPageOptionalPlaceholder.class);</pre></div><p class="paragraph"/>If the named parameter for an optional placeholder is missing, the corresponding segment is removed from the final URL:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
 setResponsePage(MountedPageWithPlaceholder.class, pageParameters);</pre></div><p class="paragraph"/>Generated URL:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/pageMount/otherSegm</pre></div><p class="paragraph"/><h3>Mounting a package</h3><p class="paragraph"/>In addition to mounting a single page, Wicket allows to mount all of the pages inside a package to a given path. Method mountPackage(String path, Class&#60;T&#62; pageClass) of class WepApplication will mount every page inside pageClass's package to the specified path.<p class="paragraph"/>The resulting URL for package-mounted pages will have the following structure:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/mountedPath/&#60;PageClassName&#62;&#91;optional query string&#93;</pre></div><p class="paragraph"/>For example in the MountedPagesExample project we have mounted all pages inside the subpackage org.tutorialWicket.subPackage with this line of code:<p class="paragraph"/><div class="code"><pre>mountPackage(<span class="java&#45;quote">"/mountPackage"</span>, StatefulPackageMount.class);</pre></div><p class="paragraph"/>StatefulPackageMount is one of the pages placed into the desired package and its URL will be:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/mountPackage/StatefulPackageMount?1</pre></div><p class="paragraph"/>Similarly to what is done by the mountPage method, the implementation of the mountPackage method mounts an instance of <code>org.apache.wicket.request.mapper.PackageMapper</code> to the given path.<p class="paragraph"/><h3>Providing custom mapper context to request mappers</h3><p class="paragraph"/>Interface <code>org.apache.wicket.request.mapper.IMapperContext</code> is used by request mappers to create new page instances and to retrieve static URL segments used to build and parse page URLs. Here is the list of these segments:
 <ul class="star">
 <li>Namespace: it's the first URL segment of non-mounted pages. By default its value is wicket.</li>
 <li>Identifier for non-bookmarkable URLs: it's the segment that identifies non bookmarkable pages. By default its value is page.</li>
-<li>Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in paragraph 8.1.1).</li>
-<li>Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in chapter 13.</li>
+<li>Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in <a href="../guide/single.html#urls_1" class="guide">paragraph 10.1.1</a>).</li>
+<li>Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in <a href="../guide/single.html#resources" class="guide">chapter 15</a>.</li>
 </ul><p class="paragraph"/>IMapperContext provides a getter method for any segment listed above. By default Wicket uses class <code>org.apache.wicket.DefaultMapperContext</code> as mapper context.<p class="paragraph"/>Project CustomMapperContext is an example of customization of mapper context where we use index as identifier for non-bookmarkable pages and staticURL as identifier for bookmarkable pages. In this project, instead of implementing our mapper context from scratch, we used DefaultMapperContext as base class overriding just the two methods we need to achieve the desired result (getBookmarkableIdentifier() and getPageIdentifier()).  The final implementation is the following:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class CustomMapperContext <span class="java&#45;keyword">extends</span> DefaultMapperContext&#123;<p class="paragraph"/>	@Override
 	<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> getBookmarkableIdentifier() &#123;
 		<span class="java&#45;keyword">return</span> <span class="java&#45;quote">"staticURL"</span>;
@@ -236,7 +236,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/urls_7.html
===================================================================
--- guide/pages/urls_7.html	(revision 1675105)
+++ guide/pages/urls_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10.7 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -192,7 +192,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/versioningCaching_1.html
===================================================================
--- guide/pages/versioningCaching_1.html	(revision 1675105)
+++ guide/pages/versioningCaching_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>8.1 Stateful pages vs stateless - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -194,7 +194,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/versioningCaching_2.html
===================================================================
--- guide/pages/versioningCaching_2.html	(revision 1675105)
+++ guide/pages/versioningCaching_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>8.2 Stateful pages - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -180,10 +180,10 @@
 		&#125;);<p class="paragraph"/>	&#125;	
 &#125;</pre></div><p class="paragraph"/>Now if we run the new example (project LifeCycleStagesRevisited) and we click on the “Reload” button, a new page version is created and the page id is increased by one:<p class="paragraph"/><img border="0" class="center" src="../img/reload-page.png"></img><p class="paragraph"/>If we press the back button the page version previously rendered (and serialized) will be retrieved (i.e. deserialized) and it will be used again to respond to our request (and page id is decremented):<p class="paragraph"/><img border="0" class="center" src="../img/browser-back.png"></img><p class="paragraph"/><blockquote class="note">
 For more details about page storing you can take a look at paragraph "Page storing" from chapter "Wicket Internals". The content of this paragraph is from wiki page https://cwiki.apache.org/confluence/display/WICKET/Page+Storage. 
-</blockquote><p class="paragraph"/>As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In paragraph 9.6 we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.<p class="paragraph"/><h3>Using a specific page version with PageReference</h3><p class="paragraph"/>To retrieve a specific page version in our code we can use class <code>org.apache.wicket.PageReference</code> by providing its constructor with the corresponding page id:<p class="paragraph"/><div class="code"><pre>//load page version with page id = 3
+</blockquote><p class="paragraph"/>As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In <a href="../guide/single.html#modelsforms_6" class="guide">paragraph 11.6</a> we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.<p class="paragraph"/><h3>Using a specific page version with PageReference</h3><p class="paragraph"/>To retrieve a specific page version in our code we can use class <code>org.apache.wicket.PageReference</code> by providing its constructor with the corresponding page id:<p class="paragraph"/><div class="code"><pre>//load page version with page id = 3
 PageReference pageReference = <span class="java&#45;keyword">new</span> PageReference(3);
 //load the related page instance
-Page page = pageReference.getPage();</pre></div><p class="paragraph"/>To get the related page instance we must use method getPage.<p class="paragraph"/><h3>Turning off page versioning</h3><p class="paragraph"/>If for any reason we need to switch off versioning for a given page, we can call its method setVersioned(false).<p class="paragraph"/><h3>Pluggable serialization</h3><p class="paragraph"/>Starting from version 1.5 it is possible to choose which implementation of Java serialization will be used by Wicket to store page versions. Wicket serializes pages using an implementation of interface <code>org.apache.wicket.serialize.ISerializer</code>. The default implementation is <code>org.apache.wicket.serialize.java.JavaSerializer</code> and it uses the standard Java serialization mechanism based on classes ObjectOutputStream and ObjectInputStream. However on Internet we can find other interesting serialization libraries like <a href="https://github.com/EsotericSoftware/kryo" target="blank">Kryo</a> or <a href="http://ruedigermoeller.github.io/fast-serialization/" target="blank">Fast</a> which perform faster then the standard implementation. The serializer in use can be customized with the setSerializer(ISerializer) method defined by setting interface <code>org.apache.wicket.settings.IFrameworkSettings</code>.<p class="paragraph"/>We can access this interface inside the method init of the class Application using the getFrameworkSettings() method :<p class="paragraph"/><div class="code"><pre>@Override
+Page page = pageReference.getPage();</pre></div><p class="paragraph"/>To get the related page instance we must use the method getPage.<p class="paragraph"/><h3>Turning off page versioning</h3><p class="paragraph"/>If for any reason we need to switch off versioning for a given page, we can call its method setVersioned(false).<p class="paragraph"/><h3>Pluggable serialization</h3><p class="paragraph"/>Starting from version 1.5 it is possible to choose which implementation of Java serialization will be used by Wicket to store page versions. Wicket serializes pages using an implementation of interface <code>org.apache.wicket.serialize.ISerializer</code>. The default implementation is <code>org.apache.wicket.serialize.java.JavaSerializer</code> and it uses the standard Java serialization mechanism based on classes ObjectOutputStream and ObjectInputStream. However on Internet we can find other interesting serialization libraries like <a href="https://github.com/EsotericSoftware/kryo" target="blank">Kryo</a> or <a href="http://ruedigermoeller.github.io/fast-serialization/" target="blank">Fast</a> which perform faster then the standard implementation. The serializer in use can be customized with the setSerializer(ISerializer) method defined by setting interface <code>org.apache.wicket.settings.IFrameworkSettings</code>.<p class="paragraph"/>We can access this interface inside the method init of the class Application using the getFrameworkSettings() method :<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
 	<span class="java&#45;keyword">super</span>.init();
@@ -205,7 +205,7 @@
 	<span class="java&#45;keyword">super</span>.init();
 	getApplicationSettings().setPageExpiredErrorPage(
 				CustomExpiredErrorPage.class);
-&#125;</pre></div><p class="paragraph"/>The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in paragraph 8.1.1).
+&#125;</pre></div><p class="paragraph"/>The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in <a href="../guide/single.html#urls_1" class="guide">paragraph 10.1.1</a>).
 
 
 
@@ -235,7 +235,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/versioningCaching_3.html
===================================================================
--- guide/pages/versioningCaching_3.html	(revision 1675105)
+++ guide/pages/versioningCaching_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>8.3 Stateless pages - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,9 +163,9 @@
                 
 
 <h2 id="versioningCaching_3">8.3 Stateless pages</h2>
-<p class="paragraph"/>Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph 10.9.<p class="paragraph"/>In Wicket a page can be stateless only if it satisfies the following requirements:
+<p class="paragraph"/>Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph <a href="../guide/single.html#forms2_10" class="guide">paragraph 12.10</a>.<p class="paragraph"/>In Wicket a page can be stateless only if it satisfies the following requirements:
 <ol>
-<li>it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in chapter 8).</li>
+<li>it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in <a href="../guide/single.html#urls_1" class="guide">chapter 10.1</a>).</li>
 <li>All its children components (and behaviors) are in turn stateless, which means that their method isStateless must return true.</li>
 </ol><p class="paragraph"/>The first requirement implies that, rather than creating a page by hand, we should rely on Wicket's capability of resolving page instances, like we do when we use method setResponsePage(Class page).<p class="paragraph"/>In order to comply with the second requirement it could be helpful to check if all children components of a page are stateless. To do this we can leverage method visitChildren and the visitor pattern to iterate over components and test if their method isStateless actually returns true:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">protected</span> void onInitialize() &#123;
@@ -215,7 +215,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/versioningCaching_4.html
===================================================================
--- guide/pages/versioningCaching_4.html	(revision 1675105)
+++ guide/pages/versioningCaching_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>8.4 Summary - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,9 +163,10 @@
                 
 
 <h2 id="versioningCaching_4">8.4 Summary</h2>
-<p class="paragraph"/>In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task.<p class="paragraph"/>However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of chapter 10 will cover these missing topics.
+<p class="paragraph"/>In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task.<p class="paragraph"/>However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of <a href="../guide/single.html#urls" class="guide">chapter 10</a> will cover these missing topics.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../../guide/componentLifecycle.html">&lt;&lt; <strong>7</strong><span>Components lifecycle</span></a></div>
@@ -192,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/whyLearn_1.html
===================================================================
--- guide/pages/whyLearn_1.html	(revision 1675105)
+++ guide/pages/whyLearn_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>3.1 We all like spaghetti :-) ... - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -193,7 +193,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/whyLearn_2.html
===================================================================
--- guide/pages/whyLearn_2.html	(revision 1675105)
+++ guide/pages/whyLearn_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>3.2 Component oriented frameworks - an overview - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/whyLearn_3.html
===================================================================
--- guide/pages/whyLearn_3.html	(revision 1675105)
+++ guide/pages/whyLearn_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>3.3 Benefits of component oriented frameworks for web development - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -198,7 +198,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/whyLearn_4.html
===================================================================
--- guide/pages/whyLearn_4.html	(revision 1675105)
+++ guide/pages/whyLearn_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>3.4 Wicket vs the other component oriented frameworks - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/wicketstuff_1.html
===================================================================
--- guide/pages/wicketstuff_1.html	(revision 1675105)
+++ guide/pages/wicketstuff_1.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27.1 What is project WicketStuff - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -197,7 +197,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/wicketstuff_2.html
===================================================================
--- guide/pages/wicketstuff_2.html	(revision 1675105)
+++ guide/pages/wicketstuff_2.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27.2 Module tinymce - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -216,7 +216,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/wicketstuff_3.html
===================================================================
--- guide/pages/wicketstuff_3.html	(revision 1675105)
+++ guide/pages/wicketstuff_3.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27.3 Module wicketstuff-gmap3 - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -207,7 +207,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/wicketstuff_4.html
===================================================================
--- guide/pages/wicketstuff_4.html	(revision 1675105)
+++ guide/pages/wicketstuff_4.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27.4 Module wicketstuff-googlecharts - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -201,7 +201,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/wicketstuff_5.html
===================================================================
--- guide/pages/wicketstuff_5.html	(revision 1675105)
+++ guide/pages/wicketstuff_5.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27.5 Module wicketstuff-inmethod-grid - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -163,7 +163,7 @@
                 
 
 <h2 id="wicketstuff_5">27.5 Module wicketstuff-inmethod-grid</h2>
-<p class="paragraph"/>Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid.<p class="paragraph"/>Just like pageable repeaters (seen in paragraph 11.4) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid1.png"></img><p class="paragraph"/>DataGrid supports also editable cells and row selection:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid2.png"></img><p class="paragraph"/>The following snippet illustrate how to use DataGrid and is taken from wiki page <a href="https://github.com/wicketstuff/core/wiki/InMethodGrid" target="blank">https://github.com/wicketstuff/core/wiki/InMethodGrid</a> :<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#8230;
+<p class="paragraph"/>Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid.<p class="paragraph"/>Just like pageable repeaters (seen in <a href="../guide/single.html#repeaters_4" class="guide">paragraph 13.4</a>) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid1.png"></img><p class="paragraph"/>DataGrid supports also editable cells and row selection:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid2.png"></img><p class="paragraph"/>The following snippet illustrate how to use DataGrid and is taken from wiki page <a href="https://github.com/wicketstuff/core/wiki/InMethodGrid" target="blank">https://github.com/wicketstuff/core/wiki/InMethodGrid</a> :<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#8230;
   &#60;div wicket:id=<span class="java&#45;quote">"grid"</span>&#62;Grid&#60;/div&#62;
 ...</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> List&#60;Person&#62; personList = //load a list of Persons
 <span class="java&#45;keyword">final</span> ListDataProvider listDataProvider = <span class="java&#45;keyword">new</span> ListDataProvider(personList);
@@ -200,7 +200,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/wicketstuff_6.html
===================================================================
--- guide/pages/wicketstuff_6.html	(revision 1675105)
+++ guide/pages/wicketstuff_6.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27.6 Module wicketstuff-rest-annotations - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -216,7 +216,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/pages/wicketstuff_7.html
===================================================================
--- guide/pages/wicketstuff_7.html	(revision 1675105)
+++ guide/pages/wicketstuff_7.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27.7 Module stateless - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -194,7 +194,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/redirects.html
===================================================================
--- guide/redirects.html	(revision 1675105)
+++ guide/redirects.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>28 Lost In Redirection With Apache Wicket (Appendix) - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -227,7 +227,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/repeaters.html
===================================================================
--- guide/repeaters.html	(revision 1675105)
+++ guide/repeaters.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>13 Displaying multiple items with repeaters - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -266,7 +266,7 @@
 
 
 <h2 id="repeaters_4">13.4 Pageable repeaters</h2>
-<p class="paragraph"/>Wicket offers a number of components that should be used when we have to display a big number of  items (for example the results of a select SQL query).<p class="paragraph"/>All these components implement interface <code>org.apache.wicket.markup.html.navigation.paging.IPageable</code> and use interface <code>IDataProvider</code> (placed in package <code>org.apache.wicket.markup.repeater.data</code>) as data source. This interface is designed to support data paging. We will see an example of data paging later in paragraph 11.4.2.<p class="paragraph"/>The methods defined by IDataProvider are the following:
+<p class="paragraph"/>Wicket offers a number of components that should be used when we have to display a big number of  items (for example the results of a select SQL query).<p class="paragraph"/>All these components implement interface <code>org.apache.wicket.markup.html.navigation.paging.IPageable</code> and use interface <code>IDataProvider</code> (placed in package <code>org.apache.wicket.markup.repeater.data</code>) as data source. This interface is designed to support data paging. We will see an example of data paging later in <a href="../guide/single.html#repeaters_4" class="guide">paragraph 13.4.2</a>.<p class="paragraph"/>The methods defined by IDataProvider are the following:
 <ul class="star">
 <li>iterator(long first, long count): returns an iterator over a subset of the entire dataset. The subset starts from the item at position first and includes all the next count items (i.e. it's the closed interval first,first+count).</li>
 <li>size(): gets the size of the entire dataset.</li>
@@ -353,7 +353,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/requestProcessing.html
===================================================================
--- guide/requestProcessing.html	(revision 1675105)
+++ guide/requestProcessing.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>9 Under the hood of the request processing - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -199,7 +199,7 @@
 
 
 <h2 id="requestProcessing_3">9.3 The “director” of request processing - RequestCycle</h2>
-<p class="paragraph"/>Class <code>org.apache.wicket.request.cycle.RequestCycle</code> is the entity in charge of serving a web request. Our application class creates a new <code>RequestCycle</code> on every request with its method <code>createRequestCycle(request, response)</code>.<p class="paragraph"/>Method <code>createRequestCycle</code> is declared as final, so we can't override it to return a custom subclass of <code>RequestCycle</code>. Instead, we must build a request cycle provider implementing interface <code>org.apache.wicket.IRequestCycleProvider</code>, and then we must tell our application class to use it via the <code>setRequestCycleProvider</code> method.<p class="paragraph"/>The current running request cycle can be retrieved at any time by calling its static method <code>RequestCycle.get()</code>. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar <code>get()</code> method is also implemented in classes <code>org.apache.wicket.Application</code> (as we have seen in paragraph 2.2.2) and <code>org.apache.wicket.Session</code> in order to get the application and the session in use by the current thread.<p class="paragraph"/><blockquote class="note">
+<p class="paragraph"/>Class <code>org.apache.wicket.request.cycle.RequestCycle</code> is the entity in charge of serving a web request. Our application class creates a new <code>RequestCycle</code> on every request with its method <code>createRequestCycle(request, response)</code>.<p class="paragraph"/>Method <code>createRequestCycle</code> is declared as final, so we can't override it to return a custom subclass of <code>RequestCycle</code>. Instead, we must build a request cycle provider implementing interface <code>org.apache.wicket.IRequestCycleProvider</code>, and then we must tell our application class to use it via the <code>setRequestCycleProvider</code> method.<p class="paragraph"/>The current running request cycle can be retrieved at any time by calling its static method <code>RequestCycle.get()</code>. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar <code>get()</code> method is also implemented in classes <code>org.apache.wicket.Application</code> (as we have seen in <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2.2</a>) and <code>org.apache.wicket.Session</code> in order to get the application and the session in use by the current thread.<p class="paragraph"/><blockquote class="note">
 The implementation of the get method takes advantage of the standard class <code>java.lang.ThreadLocal</code>. See its JavaDoc for an introduction to local-thread variables.
 </blockquote><p class="paragraph"/>Class <code>org.apache.wicket.Component</code> provides the <code>getRequestCycle()</code> method which is a convenience method that internally invokes <code>RequestCycle.get()</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> RequestCycle getRequestCycle() &#123;
 	<span class="java&#45;keyword">return</span> RequestCycle.get();
@@ -209,8 +209,8 @@
 <ul class="star">
 <li>a page class, via the <code>urlFor(Class&#60;C&#62; pageClass, PageParameters parameters)</code> method</li>
 <li>an IRequestHandler via the <code>urlFor(IRequestHandler handler)</code> method</li>
-<li>a ResourceReference via the <code>urlFor(ResourceReference reference, PageParameters params)</code> method (resource entities will be introduced in chapter 13).</li>
-</ul><p class="paragraph"/>The overloaded <code>urlFor</code> method from above also has a corresponding version that returns an instance of <code>org.apache.wicket.request.Url</code> instead of a <code>CharSequence</code>. This version has the prefix 'map' in its name (i.e. it has <code>mapUrlFor</code> as full name).<p class="paragraph"/><h3>Method setResponsePage</h3><p class="paragraph"/>The <code>RequestCycle</code> class contains the implementation of the <code>setResponsePage</code> method we use to redirect a user to a specific page (see paragraph 2.4). The namesake method of class <code>org.apache.wicket.Component</code> is just a convenience method that internally invokes the actual implementation on current request cycle:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> void setResponsePage(<span class="java&#45;keyword">final</span> Page page) &#123;
+<li>a ResourceReference via the <code>urlFor(ResourceReference reference, PageParameters params)</code> method (resource entities will be introduced in <a href="../guide/single.html#resources" class="guide">chapter 15</a>).</li>
+</ul><p class="paragraph"/>The overloaded <code>urlFor</code> method from above also has a corresponding version that returns an instance of <code>org.apache.wicket.request.Url</code> instead of a <code>CharSequence</code>. This version has the prefix 'map' in its name (i.e. it has <code>mapUrlFor</code> as full name).<p class="paragraph"/><h3>Method setResponsePage</h3><p class="paragraph"/>The <code>RequestCycle</code> class contains the implementation of the <code>setResponsePage</code> method we use to redirect a user to a specific page (see <a href="../guide/single.html#helloWorld_4" class="guide">paragraph 4.4</a>). The namesake method of class <code>org.apache.wicket.Component</code> is just a convenience method that internally invokes the actual implementation on current request cycle:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> void setResponsePage(<span class="java&#45;keyword">final</span> Page page) &#123;
 	getRequestCycle().setResponsePage(page);
 &#125;</pre></div><p class="paragraph"/><h3>RequestCycle's hook methods and listeners</h3><p class="paragraph"/>The RequestCycle comes with some hook methods which can be overridden to perform custom actions when request handling reaches a specific stage. These methods are:
 <ul class="star">
@@ -245,7 +245,7 @@
 <li><strong class="bold">setAttribute(String name, Serializable value):</strong> creates an attribute identified by the given name. If the session already contains an attribute with the same name, the new value will replace the existing one. The value must be a serializable object.</li>
 <li><strong class="bold">getAttribute(String name):</strong> returns the value of the attribute identified by the given name, or null if the name does not correspond to any attribute.</li>
 <li><strong class="bold">removeAttribute(String name):</strong> removes the attribute identified by the given name.</li>
-</ul><p class="paragraph"/>By default class WebSession will use the underlying http session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().<p class="paragraph"/><h3>Accessing to the HTTP session</h3><p class="paragraph"/>If for any reason we need to directly access to the underlying HttpSession object, we can retrieve it from the current request with the following code:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get()
+</ul><p class="paragraph"/>By default class WebSession will use the underlying HTTP session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().<p class="paragraph"/><h3>Accessing to the HTTP session</h3><p class="paragraph"/>If for any reason we need to directly access to the underlying HttpSession object, we can retrieve it from the current request with the following code:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get()
 		.getRequest()).getContainerRequest().getSession();</pre></div><p class="paragraph"/>Using the raw session object might be necessary if we have to set a session attribute with a particular name without the prefix added by Wicket. Let's say for example that we are working with Tomcat as web server. One of the administrative tools provided by Tomcat is a page listing all the active user sessions of a given web application:<p class="paragraph"/><img border="0" class="center" src="../img/tomcat-admin-sessions.png"></img><p class="paragraph"/>Tomcat allows us to set the values that will be displayed in columns “Guessed locale” and “Guessed User name”. One possible way to do this is to use session attributes named “Locale” and “userName” but we can't create them via Wicket's Session class because they would not have exactly the name required by Tomcat. Instead, we must use the raw HttpSession and set our attributes on it:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get().
 		getRequest()).getContainerRequest().getSession();<p class="paragraph"/>session.setAttribute(<span class="java&#45;quote">"Locale"</span>, <span class="java&#45;quote">"ENGLISH"</span>);
 session.setAttribute(<span class="java&#45;quote">"userName"</span>, <span class="java&#45;quote">"Mr BadGuy"</span>);</pre></div><p class="paragraph"/><h3>Temporary and permanent sessions</h3><p class="paragraph"/>Wicket doesn't need to store data into user session as long as the user visits only stateless pages. Nonetheless, even under these conditions, a temporary session object is created to process each request but it is discarded at the end of the current request. To know if the current session is temporary, we can use the isTemporary() method:<p class="paragraph"/><div class="code"><pre>Session.get().isTemporary();</pre></div><p class="paragraph"/>If a session is not temporary (i.e. it is permanent), it's identified by an unique id which can be read calling the getId() method. This value will be null if the session is temporary.<p class="paragraph"/>Although Wicket is able to automatically recognize when it needs to replace a temporary session with a permanent one, sometimes we may need to manually control this process to make our initially temporary session permanent.<p class="paragraph"/>To illustrate this possible scenario let's consider project BindSessionExample where we have a stateless home page which sets a session attribute inside its constructor and then it redirects the user to another page which displays with a label the session attribute previously created. The code of the two pages is as follows:<p class="paragraph"/>Home page:
@@ -303,9 +303,10 @@
 
 
 <h2 id="requestProcessing_6">9.6 Summary</h2>
-<p class="paragraph"/>In this chapter we had a look at how Wicket internally handles a web request. Even if most of the time  we won't need to customize this internal process, knowing how it works is essential to use the framework at 100%.<p class="paragraph"/>Entities like Application and Session will come in handy again when we will tackle the topic of security in chapter 20.
+<p class="paragraph"/>In this chapter we had a look at how Wicket internally handles a web request. Even if most of the time  we won't need to customize this internal process, knowing how it works is essential to use the framework at 100%.<p class="paragraph"/>Entities like Application and Session will come in handy again when we will tackle the topic of security in <a href="../guide/single.html#security" class="guide">chapter 21</a>.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../guide/versioningCaching.html">&lt;&lt; <strong>8</strong><span>Page versioning and caching</span></a></div>
@@ -332,7 +333,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/resources.html
===================================================================
--- guide/resources.html	(revision 1675105)
+++ guide/resources.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>15 Resource management with Wicket - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -213,13 +213,15 @@
                 
 
 <h1 id="resources">15 Resource management with Wicket</h1>
-One of the biggest challenge for a web framework is to offer an efficient and consistent mechanism to handle internal resources such as CSS/JavaScript files, picture files, pdf and so on. Resources can be static (like an icon used across the site) or dynamic (they can be generated on the fly) and they can be made available to users as a download or as a simple URL.<p class="paragraph"/>In paragraph 4.6 we have already seen how to add CSS and JavaScript contents to the header section of the page. In the first half of this chapter we will learn a more sophisticated technique that allows us to manage static resources directly from code and “pack” them with our custom components.<p class="paragraph"/>Then, in the second part of the chapter we will see how to implement custom resources to enrich our web application with more complex and dynamic functionalities.
+One of the biggest challenge for a web framework is to offer an efficient and consistent mechanism to handle internal resources such as CSS/JavaScript files, picture files, pdf and so on. Resources can be static (like an icon used across the site) or dynamic (they can be generated on the fly) and they can be made available to users as a download or as a simple URL.<p class="paragraph"/>In <a href="../guide/single.html#keepControl_6" class="guide">paragraph 6.6</a> we have already seen how to add CSS and JavaScript contents to the header section of the page. In the first half of this chapter we will learn a more sophisticated technique that allows us to manage static resources directly from code and “pack” them with our custom components.<p class="paragraph"/>Then, in the second part of the chapter we will see how to implement custom resources to enrich our web application with more complex and dynamic functionalities.
 
 
+
 <h2 id="resources_1">15.1 Static vs dynamic resources</h2>
-<p class="paragraph"/>In Wicket a resource is an entity that can interact with the current request and response and It must implement interface <code>org.apache.wicket.request.resource.IResource</code>. This interface defines just method respond(IResource.Attributes attributes) where the nested class IResource. Attributes provides access to request, response and page parameters objects.<p class="paragraph"/>Resources can be static or dynamic. Static resources don't entail any computational effort to be generated and they generally correspond to a resource on the filesystem. On the contrary dynamic resources are generated on the fly when they are requested, following a specific logic coded inside them.<p class="paragraph"/>An example of dynamic resource is the built-in class CaptchaImageResource in package <code>org.apache.wicket.extensions.markup.html.captcha</code> which generates a captcha image each time is rendered.<p class="paragraph"/>As we will see in paragraph 13.6, developers can build custom resources extending base class <code>org.apache.wicket.request.resource.AbstractResource</code>.
+<p class="paragraph"/>In Wicket a resource is an entity that can interact with the current request and response and It must implement interface <code>org.apache.wicket.request.resource.IResource</code>. This interface defines just method respond(IResource.Attributes attributes) where the nested class IResource. Attributes provides access to request, response and page parameters objects.<p class="paragraph"/>Resources can be static or dynamic. Static resources don't entail any computational effort to be generated and they generally correspond to a resource on the filesystem. On the contrary dynamic resources are generated on the fly when they are requested, following a specific logic coded inside them.<p class="paragraph"/>An example of dynamic resource is the built-in class CaptchaImageResource in package <code>org.apache.wicket.extensions.markup.html.captcha</code> which generates a captcha image each time is rendered.<p class="paragraph"/>As we will see in <a href="../guide/single.html#resources_10" class="guide">paragraph 15.10</a>, developers can build custom resources extending base class <code>org.apache.wicket.request.resource.AbstractResource</code>.
 
 
+
 <h2 id="resources_2">15.2 Resource references</h2>
 <p class="paragraph"/>Most of the times in Wicket we won't directly instantiate a resource but rather we will use a reference to it. Resource references are represented by abstract class <code>org.apache.wicket.request.resource.ResourceReference</code> which returns a concrete resource with factory method getResource(). In this way we can lazy-initialize resources loading them only the first time they are requested.
 
@@ -240,7 +242,7 @@
 	            <span class="java&#45;keyword">new</span> PackageResourceReference(getClass(), <span class="java&#45;quote">"calendar.jpg"</span>);
 		add(<span class="java&#45;keyword">new</span> Image(<span class="java&#45;quote">"packageResPicture"</span>, resourceReference));
 	&#125;
-&#125;</pre></div><p class="paragraph"/>Wicket will take care of generating a valid URL for file calendar.jpg. URLs for package resources have the following structure:<p class="paragraph"/><code>&#60;path to application root&#62;/wicket/resource/&#60;fully qualified classname&#62;/&#60;resource file name&#62;-&#60;ver-&#60;id&#62;&#62;(.file extension)</code><p class="paragraph"/>In our example the URL for our picture file calendar.jpg is the following:<p class="paragraph"/><code>./wicket/resource/org.wicketTutorial.CustomPanel/calendar-ver-1297887542000.jpg</code><p class="paragraph"/>The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in paragraph 8.6.4.<p class="paragraph"/>The fourth segment is the fully qualified name of the class used to locate the resource and it is the scope of the package resource. In the last segment of the URL we can find the name of the resource (the file name).<p class="paragraph"/>As you can see Wicket has automatically appended to the file name a version identifier (ver-1297887542000). When Wicket runs in DEVELOPMENT mode this identifier contains the timestamp in millisecond indicating the last time the resource file was modified. This can be useful when we are developing our application and resource files are frequently modified. Appending the timestamp to the original name we are sure that our browser will use always the last version of the file and not an old, out of date, cached version.<p class="paragraph"/>When instead Wicket is running in DEPLOYMENT mode, the version identifier will contain the MD5 digest of the file instead of the timestamp. The digest is computed only the first time the resource is requested. This perfectly makes sense as static resources don't change so often when our application runs into production environment and when this appends the application is redeployed.<p class="paragraph"/><blockquote class="note">
+&#125;</pre></div><p class="paragraph"/>Wicket will take care of generating a valid URL for file calendar.jpg. URLs for package resources have the following structure:<p class="paragraph"/><code>&#60;path to application root&#62;/wicket/resource/&#60;fully qualified classname&#62;/&#60;resource file name&#62;-&#60;ver-&#60;id&#62;&#62;(.file extension)</code><p class="paragraph"/>In our example the URL for our picture file calendar.jpg is the following:<p class="paragraph"/><code>./wicket/resource/org.wicketTutorial.CustomPanel/calendar-ver-1297887542000.jpg</code><p class="paragraph"/>The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6.4</a>.<p class="paragraph"/>The fourth segment is the fully qualified name of the class used to locate the resource and it is the scope of the package resource. In the last segment of the URL we can find the name of the resource (the file name).<p class="paragraph"/>As you can see Wicket has automatically appended to the file name a version identifier (ver-1297887542000). When Wicket runs in DEVELOPMENT mode this identifier contains the timestamp in millisecond indicating the last time the resource file was modified. This can be useful when we are developing our application and resource files are frequently modified. Appending the timestamp to the original name we are sure that our browser will use always the last version of the file and not an old, out of date, cached version.<p class="paragraph"/>When instead Wicket is running in DEPLOYMENT mode, the version identifier will contain the MD5 digest of the file instead of the timestamp. The digest is computed only the first time the resource is requested. This perfectly makes sense as static resources don't change so often when our application runs into production environment and when this appends the application is redeployed.<p class="paragraph"/><blockquote class="note">
 Package resources can be localized following the same rules seen for resource bundles and markup files:<p class="paragraph"/><img border="0" class="center" src="../img/package-resource-localization.png"></img><p class="paragraph"/>In the example illustrated in the picture above, if we try to retrieve package resource calendar.jpg when the current locale is set to French, the actual file returned will be calendar_fr.jpg.
 </blockquote><p class="paragraph"/><h3>Responsive images - multiple resource references use in one component</h3><p class="paragraph"/>Since Wicket 7.0.0 the build-in component <code>org.apache.wicket.markup.html.image.Image</code> allows you to add several ResourceReferences via varargs and to provide sizes for each image so that the browser is able to pick the best image source.<p class="paragraph"/><strong class="bold">HTML:</strong>
 <div class="code"><pre>&#8230;
@@ -276,7 +278,7 @@
 ...</pre></div><p class="paragraph"/><strong class="bold">Java Code:</strong>
 <div class="code"><pre>&#8230;
     Video video = <span class="java&#45;keyword">new</span> Video(<span class="java&#45;quote">"video"</span>, <span class="java&#45;keyword">new</span> PackageResourceReference(getClass(),<span class="java&#45;quote">"video.mp4"</span>));
-...</pre></div><p class="paragraph"/><h3>Using package resources with tag &#60;wicket:link&#62;</h3><p class="paragraph"/>In paragraph 8.3 we have used tag &#60;wicket:link&#62; to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:<p class="paragraph"/><div class="code"><pre>&#60;wicket:link&#62;
+...</pre></div><p class="paragraph"/><h3>Using package resources with tag &#60;wicket:link&#62;</h3><p class="paragraph"/>In <a href="../guide/single.html#urls_3" class="guide">paragraph 10.3</a> we have used tag &#60;wicket:link&#62; to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:<p class="paragraph"/><div class="code"><pre>&#60;wicket:link&#62;
    &#60;img src=<span class="java&#45;quote">"icon.png"</span>/&#62;
 &#60;/wicket:link&#62;</pre></div><p class="paragraph"/>In the example above Wicket will populate the attribute src with the URL corresponding to the package resource icon.png. &#60;wicket:link&#62; supports also tag &#60;link&#62; for CSS files and tag &#60;script&#62; for JavaScript files.
 
@@ -283,7 +285,7 @@
 
 
 <h2 id="resources_4">15.4 Adding resources to page header section</h2>
-<p class="paragraph"/>Wicket comes with interface <code>org.apache.wicket.markup.html.IHeaderContributor</code> which allows components and behaviors (which will be introduced later in paragraph 15.1) to contribute to the header section of their page. The only method defined in this interface is <code>renderHead(IHeaderResponse response)</code> where <code>IHeaderResponse</code> is an interface which defines method <code>render(HeaderItem item)</code> to write static resources or free-form text into the header section of the page.<p class="paragraph"/>Header entries are instances of abstract class <code>org.apache.wicket.markup.head.HeaderItem</code>. Wicket provides a set of built-in implementations of this class suited for the most common types of resources. With the exception of <code>PriorityHeaderItem</code>, every implementation of <code>HeaderItem</code> is an abstract factory class:
+<p class="paragraph"/>Wicket comes with interface <code>org.apache.wicket.markup.html.IHeaderContributor</code> which allows components and behaviors (which will be introduced later in <a href="../guide/single.html#advanced_1" class="guide">paragraph 17.1</a>) to contribute to the header section of their page. The only method defined in this interface is <code>renderHead(IHeaderResponse response)</code> where <code>IHeaderResponse</code> is an interface which defines method <code>render(HeaderItem item)</code> to write static resources or free-form text into the header section of the page.<p class="paragraph"/>Header entries are instances of abstract class <code>org.apache.wicket.markup.head.HeaderItem</code>. Wicket provides a set of built-in implementations of this class suited for the most common types of resources. With the exception of <code>PriorityHeaderItem</code>, every implementation of <code>HeaderItem</code> is an abstract factory class:
 <ul class="star">
 <li><strong class="bold">CssHeaderItem:</strong> represents a CSS resource. Factory methods provided by this class are <code>forReference</code> which takes in input a resource reference, <code>forUrl</code> which creates an CSS item from a given URL and <code>forCSS</code> which takes in input an arbitrary CSS string and an optional id value to identify the resource.</li>
 <li><strong class="bold">JavaScriptHeaderItem:</strong> represents a JavaScript resource. Just like <code>CssHeaderItem</code> it provides factory methods <code>forReference</code> and <code>forUrl</code> along with method <code>forScript</code> which takes in input an arbitrary string representing the script and an optional id value to identify the resource. Method <code>forReference</code> also supports boolean parameter <code>defer</code> which renders the namesake attribute in the script tag (<code>defer</code> attribute indicates that our script must be execute only after the page has loaded).</li>
@@ -392,7 +394,7 @@
 
 
 <h2 id="resources_10">15.10 Custom resources</h2>
-<p class="paragraph"/>In Wicket the best way to add dynamic functionalities to our application (such as csv export, a pdf generated on the fly, etc...) is implementing a custom resource. In this paragraph as example of custom resource we will build a basic RSS feeds generator which can be used to publish feeds on our site (project CustomResourceMounting). Instead of generating a RSS feed by hand we will use Rome framework and its utility classes.<p class="paragraph"/>As hinted above in paragraph 13.1, class <code>AbstractResource</code> can be used as base class to implement new resources. This class defines abstract method <code>newResourceResponse</code> which is invoked when the resource is requested. The following is the code of our RSS feeds generator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RSSProducerResource <span class="java&#45;keyword">extends</span> AbstractResource &#123;<p class="paragraph"/>  @Override
+<p class="paragraph"/>In Wicket the best way to add dynamic functionalities to our application (such as csv export, a pdf generated on the fly, etc...) is implementing a custom resource. In this paragraph as example of custom resource we will build a basic RSS feeds generator which can be used to publish feeds on our site (project CustomResourceMounting). Instead of generating a RSS feed by hand we will use Rome framework and its utility classes.<p class="paragraph"/>As hinted above in <a href="../guide/single.html#resources_1" class="guide">paragraph 15.1</a>, class <code>AbstractResource</code> can be used as base class to implement new resources. This class defines abstract method <code>newResourceResponse</code> which is invoked when the resource is requested. The following is the code of our RSS feeds generator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RSSProducerResource <span class="java&#45;keyword">extends</span> AbstractResource &#123;<p class="paragraph"/>  @Override
   <span class="java&#45;keyword">protected</span> ResourceResponse newResourceResponse(Attributes attributes) &#123;
     ResourceResponse resourceResponse = <span class="java&#45;keyword">new</span> ResourceResponse();
     resourceResponse.setContentType(<span class="java&#45;quote">"text/xml"</span>);
@@ -416,8 +418,9 @@
 &#125;</pre></div><p class="paragraph"/>Method <code>newResourceResponse</code> returns an instance of <code>ResourceResponse</code> representing the response generated by the custom resource. Since RSS feeds are based on XML, in the code above we have set the type of the response to text/xml and the text encoding to utf-8.<p class="paragraph"/>To specify the content that will be returned by our resource we must also provide an implementation of inner class <code>WriteCallback</code> which is responsible for writing content data to response's output stream. In our project we used class SyndFeedOutput from Rome framework to write our feed to response. Method <code>getFeed()</code> is just an utility method that generates a sample RSS feed (which is an instance of interface <code>com.sun.syndication.feed.synd.SyndFeed</code>).<p class="paragraph"/>Now that we have our custom resource in place, we can use it in the home page of the project. The easiest way to make a resource available to users is to expose it with link component <code>ResourceLink</code>:<p class="paragraph"/><div class="code"><pre>add(<span class="java&#45;keyword">new</span> ResourceLink(<span class="java&#45;quote">"rssLink"</span>, <span class="java&#45;keyword">new</span> RSSProducerResource()));</pre></div><p class="paragraph"/>In the next paragraphs we will see how to register a resource at application-level and how to mount it to an arbitrary URL.
 
 
+
 <h2 id="resources_11">15.11 Mounting resources</h2>
-<p class="paragraph"/>Just like pages also resources can be mounted to a specific path. Class <code>WebApplication</code> provides method <code>mountResource</code> which is almost identical to <code>mountPage</code> seen in paragraph 8.6.1:<p class="paragraph"/><div class="code"><pre>@Override
+<p class="paragraph"/>Just like pages also resources can be mounted to a specific path. Class <code>WebApplication</code> provides method <code>mountResource</code> which is almost identical to <code>mountPage</code> seen in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6.1</a>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init() &#123;
   <span class="java&#45;keyword">super</span>.init();
   //resource mounted to path /foo/bar
@@ -442,6 +445,7 @@
 &#125;</pre></div>
 
 
+
 <h2 id="resources_12">15.12 Shared resources</h2>
 <p class="paragraph"/>Resources can be added to a global registry in order to share them at application-level. Shared resources are identified by an application-scoped key and they can be easily retrieved at a later time using reference class <code>SharedResourceReference</code>. The global registry can be accessed with <code>Application</code>'s method <code>getSharedResources</code>. In the following excerpt of code (taken again from project <code>CustomResourceMounting</code>) we register an instance of our custom RSS feeds producer as application-shared resource:<p class="paragraph"/><div class="code"><pre>//init application's method
   @Override
@@ -549,7 +553,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/security.html
===================================================================
--- guide/security.html	(revision 1675105)
+++ guide/security.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>21 Security with Wicket - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -307,7 +307,7 @@
   &#123;		                
     //Authentication code&#8230;
   &#125;
-&#125;;</pre></div><p class="paragraph"/>By default <code>SimplePageAuthorizationStrategy</code> checks for permissions only on pages. If we want to change this behavior and check also other kinds of components, we must override method <code>isActionAuthorized</code> and implement our custom logic inside it.<p class="paragraph"/><h3>Role-based strategies</h3><p class="paragraph"/>At the end of paragraph 20.1 we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.<p class="paragraph"/>In Wicket roles are simple strings like “BASIC_USER” or “ADMIN” (they don't need to be capitalized) and they are handled with class <code>org.apache.wicket.authroles.authorization.strategies.role.Roles</code>. This class extends standard HashSet collection adding some functionalities to check whether the set contains one or more roles. Class <code>Roles</code> already defines roles Roles.USER and Roles.ADMIN.<p class="paragraph"/>The session class in the following example returns a custom “SIGNED_IN” role for every authenticated user and it adds an Roles.ADMIN role if username is equal to superuser:<p class="paragraph"/><div class="code"><pre>class BasicAuthenticationRolesSession <span class="java&#45;keyword">extends</span> AuthenticatedWebSession &#123;
+&#125;;</pre></div><p class="paragraph"/>By default <code>SimplePageAuthorizationStrategy</code> checks for permissions only on pages. If we want to change this behavior and check also other kinds of components, we must override method <code>isActionAuthorized</code> and implement our custom logic inside it.<p class="paragraph"/><h3>Role-based strategies</h3><p class="paragraph"/>At the end of <a href="../guide/single.html#security_1" class="guide">paragraph 21.1</a> we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.<p class="paragraph"/>In Wicket roles are simple strings like “BASIC_USER” or “ADMIN” (they don't need to be capitalized) and they are handled with class <code>org.apache.wicket.authroles.authorization.strategies.role.Roles</code>. This class extends standard HashSet collection adding some functionalities to check whether the set contains one or more roles. Class <code>Roles</code> already defines roles Roles.USER and Roles.ADMIN.<p class="paragraph"/>The session class in the following example returns a custom “SIGNED_IN” role for every authenticated user and it adds an Roles.ADMIN role if username is equal to superuser:<p class="paragraph"/><div class="code"><pre>class BasicAuthenticationRolesSession <span class="java&#45;keyword">extends</span> AuthenticatedWebSession &#123;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> userName;<p class="paragraph"/>	<span class="java&#45;keyword">public</span> BasicAuthenticationRolesSession(Request request) &#123;
 		<span class="java&#45;keyword">super</span>(request);		
 	&#125;<p class="paragraph"/>	@Override
@@ -321,7 +321,7 @@
 			resultRoles.add(Roles.ADMIN);<p class="paragraph"/>		<span class="java&#45;keyword">return</span> resultRoles;
 	&#125;
 &#125;</pre></div><p class="paragraph"/>Roles can be adopted to apply security restrictions on our pages and components. This can be done  using one of the two built-in authorization strategies that extend super class <code>AbstractRoleAuthorizationStrategyWicket</code>: <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code><p class="paragraph"/>The difference between these two strategies is that <code>MetaDataRoleAuthorizationStrategy</code> handles role-based authorizations with Wicket metadata while <code>AnnotationsRoleAuthorizationStrategy</code> uses Java annotations.<p class="paragraph"/><blockquote class="note">
-Application class <code>AuthenticatedWebApplication</code> already sets <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code> as its own authorization strategies (it uses a compound strategy as we will see in paragraph 20.2).<p class="paragraph"/>The code that we will see in the next examples is for illustrative purpose only. If our application class inherits from <code>AuthenticatedWebApplication</code> we won't need to configure anything to use these two strategies.
+Application class <code>AuthenticatedWebApplication</code> already sets <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code> as its own authorization strategies (it uses a compound strategy as we will see in <a href="../guide/single.html#security_2" class="guide">paragraph 21.2</a>).<p class="paragraph"/>The code that we will see in the next examples is for illustrative purpose only. If our application class inherits from <code>AuthenticatedWebApplication</code> we won't need to configure anything to use these two strategies.
 </blockquote><p class="paragraph"/><h4>Using roles with metadata</h4><p class="paragraph"/>Strategy <code>MetaDataRoleAuthorizationStrategy</code> uses application and components metadata to implement role-based authorizations. The class defines a set of static methods authorize that can be used to specify which roles are allowed to instantiate a component and which roles can perform a given action on a component.<p class="paragraph"/>The following code snippet reports both application and session classes from project <code>MetaDataRolesStrategyExample</code> and illustrates how to use <code>MetaDataRoleAuthorizationStrategy</code> to allow access to a given page (AdminOnlyPage) only to ADMIN role:<p class="paragraph"/><strong class="bold">Application class:</strong><p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class WicketApplication <span class="java&#45;keyword">extends</span> AuthenticatedWebApplication&#123;    		
    @Override
    <span class="java&#45;keyword">public</span> <span class="java&#45;object">Class</span>&#60;? <span class="java&#45;keyword">extends</span> WebPage&#62; getHomePage()&#123;
@@ -362,7 +362,7 @@
    <span class="java&#45;keyword">public</span> void init()&#123;   
       getApplicationSettings().setAccessDeniedPage(
 			MyCustomAccessDeniedPage.class); 
-   &#125;</pre></div><p class="paragraph"/>Just like custom “Page expired” page (see chapter 6.2.5), also custom “Access denied” page must be bookmarkable.<p class="paragraph"/><h4>Using roles with annotations</h4><p class="paragraph"/>Strategy <code>AnnotationsRoleAuthorizationStrategy</code> relies on two built-in annotations to handle role-based authorizations. These annotations are <code>AuthorizeInstantiation</code> and <code>AuthorizeAction</code>. As their names suggest the first annotation specifies which roles are allowed to instantiate the annotated component while the second must be used to indicate which roles are allowed to perform a specific action on the annotated component.<p class="paragraph"/>In the following example we use annotations to make a page accessible only to signed-in users and to enable it only if user has the ADMIN role:<p class="paragraph"/><div class="code"><pre>@AuthorizeInstantiation(<span class="java&#45;quote">"SIGNED_IN"</span>)
+   &#125;</pre></div><p class="paragraph"/>Just like custom “Page expired” page (see <a href="../guide/single.html#versioningCaching_2" class="guide">chapter 8.2.5</a>), also custom “Access denied” page must be bookmarkable.<p class="paragraph"/><h4>Using roles with annotations</h4><p class="paragraph"/>Strategy <code>AnnotationsRoleAuthorizationStrategy</code> relies on two built-in annotations to handle role-based authorizations. These annotations are <code>AuthorizeInstantiation</code> and <code>AuthorizeAction</code>. As their names suggest the first annotation specifies which roles are allowed to instantiate the annotated component while the second must be used to indicate which roles are allowed to perform a specific action on the annotated component.<p class="paragraph"/>In the following example we use annotations to make a page accessible only to signed-in users and to enable it only if user has the ADMIN role:<p class="paragraph"/><div class="code"><pre>@AuthorizeInstantiation(<span class="java&#45;quote">"SIGNED_IN"</span>)
 @AuthorizeAction(action = <span class="java&#45;quote">"ENABLE"</span>, roles = &#123;<span class="java&#45;quote">"ADMIN"</span>&#125;)
 <span class="java&#45;keyword">public</span> class MyPage <span class="java&#45;keyword">extends</span> WebPage &#123;
    //Page class code&#8230;
@@ -385,7 +385,7 @@
 
 
 <h2 id="security_3">21.3 Using HTTPS protocol</h2>
-<p class="paragraph"/>HTTPS is the standard technology adopted on Internet to create a secure communication channel between web applications and their users.<p class="paragraph"/>In Wicket we can easily protect our pages with HTTPS mounting a special request mapper called <code>HttpsMapper</code> and using annotation RequireHttps with those pages we want to serve over this protocol. Both these two entities are in package <code>org.apache.wicket.protocol.https</code>.<p class="paragraph"/>HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation <code>RequireHttps</code>. Most of the times the wrapped mapper will be the root one, just like we saw before for <code>CryptoMapper</code> in paragraph 10.6.<p class="paragraph"/>Another parameter needed to build a <code>HttpsMapper</code> is an instance of class <code>HttpsConfi</code>g. This class allows us to specify which ports must be used for HTTPS and HTTP. By default the port numbers used by these two protocols are respectively 443 and 80.<p class="paragraph"/>The following code is taken from project <code>HttpsProtocolExample</code> and illustrates how to enable HTTPS  in our applications:<p class="paragraph"/><div class="code"><pre>//Application class code&#8230;
+<p class="paragraph"/>HTTPS is the standard technology adopted on Internet to create a secure communication channel between web applications and their users.<p class="paragraph"/>In Wicket we can easily protect our pages with HTTPS mounting a special request mapper called <code>HttpsMapper</code> and using annotation RequireHttps with those pages we want to serve over this protocol. Both these two entities are in package <code>org.apache.wicket.protocol.https</code>.<p class="paragraph"/>HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation <code>RequireHttps</code>. Most of the times the wrapped mapper will be the root one, just like we saw before for <code>CryptoMapper</code> in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6</a>.<p class="paragraph"/>Another parameter needed to build a <code>HttpsMapper</code> is an instance of class <code>HttpsConfi</code>g. This class allows us to specify which ports must be used for HTTPS and HTTP. By default the port numbers used by these two protocols are respectively 443 and 80.<p class="paragraph"/>The following code is taken from project <code>HttpsProtocolExample</code> and illustrates how to enable HTTPS  in our applications:<p class="paragraph"/><div class="code"><pre>//Application class code&#8230;
 @Override
 <span class="java&#45;keyword">public</span> void init()&#123;   
    setRootRequestMapper(<span class="java&#45;keyword">new</span> HttpsMapper(getRootRequestMapper(), 
@@ -497,7 +497,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/single.html
===================================================================
--- guide/single.html	(revision 1675105)
+++ guide/single.html	(working copy)
@@ -111,7 +111,7 @@
 
                         <div class="project">
                             <h1>Apache Wicket User Guide - Reference Documentation</h1>
-                            <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                            <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
                             <p><strong>Version:</strong> 6.x</p>
                             
                         </div>
@@ -1179,10 +1179,10 @@
 		&#125;);<p class="paragraph"/>	&#125;	
 &#125;</pre></div><p class="paragraph"/>Now if we run the new example (project LifeCycleStagesRevisited) and we click on the “Reload” button, a new page version is created and the page id is increased by one:<p class="paragraph"/><img border="0" class="center" src="../img/reload-page.png"></img><p class="paragraph"/>If we press the back button the page version previously rendered (and serialized) will be retrieved (i.e. deserialized) and it will be used again to respond to our request (and page id is decremented):<p class="paragraph"/><img border="0" class="center" src="../img/browser-back.png"></img><p class="paragraph"/><blockquote class="note">
 For more details about page storing you can take a look at paragraph "Page storing" from chapter "Wicket Internals". The content of this paragraph is from wiki page https://cwiki.apache.org/confluence/display/WICKET/Page+Storage. 
-</blockquote><p class="paragraph"/>As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In paragraph 9.6 we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.<p class="paragraph"/><h3>Using a specific page version with PageReference</h3><p class="paragraph"/>To retrieve a specific page version in our code we can use class <code>org.apache.wicket.PageReference</code> by providing its constructor with the corresponding page id:<p class="paragraph"/><div class="code"><pre>//load page version with page id = 3
+</blockquote><p class="paragraph"/>As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In <a href="../guide/single.html#modelsforms_6" class="guide">paragraph 11.6</a> we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.<p class="paragraph"/><h3>Using a specific page version with PageReference</h3><p class="paragraph"/>To retrieve a specific page version in our code we can use class <code>org.apache.wicket.PageReference</code> by providing its constructor with the corresponding page id:<p class="paragraph"/><div class="code"><pre>//load page version with page id = 3
 PageReference pageReference = <span class="java&#45;keyword">new</span> PageReference(3);
 //load the related page instance
-Page page = pageReference.getPage();</pre></div><p class="paragraph"/>To get the related page instance we must use method getPage.<p class="paragraph"/><h3>Turning off page versioning</h3><p class="paragraph"/>If for any reason we need to switch off versioning for a given page, we can call its method setVersioned(false).<p class="paragraph"/><h3>Pluggable serialization</h3><p class="paragraph"/>Starting from version 1.5 it is possible to choose which implementation of Java serialization will be used by Wicket to store page versions. Wicket serializes pages using an implementation of interface <code>org.apache.wicket.serialize.ISerializer</code>. The default implementation is <code>org.apache.wicket.serialize.java.JavaSerializer</code> and it uses the standard Java serialization mechanism based on classes ObjectOutputStream and ObjectInputStream. However on Internet we can find other interesting serialization libraries like <a href="https://github.com/EsotericSoftware/kryo" target="blank">Kryo</a> or <a href="http://ruedigermoeller.github.io/fast-serialization/" target="blank">Fast</a> which perform faster then the standard implementation. The serializer in use can be customized with the setSerializer(ISerializer) method defined by setting interface <code>org.apache.wicket.settings.IFrameworkSettings</code>.<p class="paragraph"/>We can access this interface inside the method init of the class Application using the getFrameworkSettings() method :<p class="paragraph"/><div class="code"><pre>@Override
+Page page = pageReference.getPage();</pre></div><p class="paragraph"/>To get the related page instance we must use the method getPage.<p class="paragraph"/><h3>Turning off page versioning</h3><p class="paragraph"/>If for any reason we need to switch off versioning for a given page, we can call its method setVersioned(false).<p class="paragraph"/><h3>Pluggable serialization</h3><p class="paragraph"/>Starting from version 1.5 it is possible to choose which implementation of Java serialization will be used by Wicket to store page versions. Wicket serializes pages using an implementation of interface <code>org.apache.wicket.serialize.ISerializer</code>. The default implementation is <code>org.apache.wicket.serialize.java.JavaSerializer</code> and it uses the standard Java serialization mechanism based on classes ObjectOutputStream and ObjectInputStream. However on Internet we can find other interesting serialization libraries like <a href="https://github.com/EsotericSoftware/kryo" target="blank">Kryo</a> or <a href="http://ruedigermoeller.github.io/fast-serialization/" target="blank">Fast</a> which perform faster then the standard implementation. The serializer in use can be customized with the setSerializer(ISerializer) method defined by setting interface <code>org.apache.wicket.settings.IFrameworkSettings</code>.<p class="paragraph"/>We can access this interface inside the method init of the class Application using the getFrameworkSettings() method :<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
 	<span class="java&#45;keyword">super</span>.init();
@@ -1204,14 +1204,14 @@
 	<span class="java&#45;keyword">super</span>.init();
 	getApplicationSettings().setPageExpiredErrorPage(
 				CustomExpiredErrorPage.class);
-&#125;</pre></div><p class="paragraph"/>The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in paragraph 8.1.1).
+&#125;</pre></div><p class="paragraph"/>The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in <a href="../guide/single.html#urls_1" class="guide">paragraph 10.1.1</a>).
 
 
 
 <h2 id="versioningCaching_3">8.3 Stateless pages</h2>
-<p class="paragraph"/>Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph 10.9.<p class="paragraph"/>In Wicket a page can be stateless only if it satisfies the following requirements:
+<p class="paragraph"/>Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph <a href="../guide/single.html#forms2_10" class="guide">paragraph 12.10</a>.<p class="paragraph"/>In Wicket a page can be stateless only if it satisfies the following requirements:
 <ol>
-<li>it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in chapter 8).</li>
+<li>it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in <a href="../guide/single.html#urls_1" class="guide">chapter 10.1</a>).</li>
 <li>All its children components (and behaviors) are in turn stateless, which means that their method isStateless must return true.</li>
 </ol><p class="paragraph"/>The first requirement implies that, rather than creating a page by hand, we should rely on Wicket's capability of resolving page instances, like we do when we use method setResponsePage(Class page).<p class="paragraph"/>In order to comply with the second requirement it could be helpful to check if all children components of a page are stateless. To do this we can leverage method visitChildren and the visitor pattern to iterate over components and test if their method isStateless actually returns true:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">protected</span> void onInitialize() &#123;
@@ -1236,9 +1236,10 @@
 
 
 <h2 id="versioningCaching_4">8.4 Summary</h2>
-<p class="paragraph"/>In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task.<p class="paragraph"/>However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of chapter 10 will cover these missing topics.
+<p class="paragraph"/>In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task.<p class="paragraph"/>However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of <a href="../guide/single.html#urls" class="guide">chapter 10</a> will cover these missing topics.
 
 
+
 <h1 id="requestProcessing">9 Under the hood of the request processing</h1>
 Although Wicket was born to provide a reliable and comprehensive object oriented abstraction for web development, sometimes we might need to work directly with “raw” web entities such as user session, web request, query parameters, and so on. For example this is necessary if we want to store an arbitrary parameter in the user session.<p class="paragraph"/>Wicket provides wrapper classes that allow us to easily access to web entities without the burden of using the low-level APIs of Java Servlet Specification. However it will always be possible to access standard classes (like HttpSession, HttpServletRequest, etc...) that lay under our Wicket application.
 This chapter will introduce these wrapper classes and it will explain how Wicket uses them to handle the web requests initiated by the user's browser.
@@ -1253,7 +1254,7 @@
 
 
 <h2 id="requestProcessing_3">9.3 The “director” of request processing - RequestCycle</h2>
-<p class="paragraph"/>Class <code>org.apache.wicket.request.cycle.RequestCycle</code> is the entity in charge of serving a web request. Our application class creates a new <code>RequestCycle</code> on every request with its method <code>createRequestCycle(request, response)</code>.<p class="paragraph"/>Method <code>createRequestCycle</code> is declared as final, so we can't override it to return a custom subclass of <code>RequestCycle</code>. Instead, we must build a request cycle provider implementing interface <code>org.apache.wicket.IRequestCycleProvider</code>, and then we must tell our application class to use it via the <code>setRequestCycleProvider</code> method.<p class="paragraph"/>The current running request cycle can be retrieved at any time by calling its static method <code>RequestCycle.get()</code>. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar <code>get()</code> method is also implemented in classes <code>org.apache.wicket.Application</code> (as we have seen in paragraph 2.2.2) and <code>org.apache.wicket.Session</code> in order to get the application and the session in use by the current thread.<p class="paragraph"/><blockquote class="note">
+<p class="paragraph"/>Class <code>org.apache.wicket.request.cycle.RequestCycle</code> is the entity in charge of serving a web request. Our application class creates a new <code>RequestCycle</code> on every request with its method <code>createRequestCycle(request, response)</code>.<p class="paragraph"/>Method <code>createRequestCycle</code> is declared as final, so we can't override it to return a custom subclass of <code>RequestCycle</code>. Instead, we must build a request cycle provider implementing interface <code>org.apache.wicket.IRequestCycleProvider</code>, and then we must tell our application class to use it via the <code>setRequestCycleProvider</code> method.<p class="paragraph"/>The current running request cycle can be retrieved at any time by calling its static method <code>RequestCycle.get()</code>. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar <code>get()</code> method is also implemented in classes <code>org.apache.wicket.Application</code> (as we have seen in <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2.2</a>) and <code>org.apache.wicket.Session</code> in order to get the application and the session in use by the current thread.<p class="paragraph"/><blockquote class="note">
 The implementation of the get method takes advantage of the standard class <code>java.lang.ThreadLocal</code>. See its JavaDoc for an introduction to local-thread variables.
 </blockquote><p class="paragraph"/>Class <code>org.apache.wicket.Component</code> provides the <code>getRequestCycle()</code> method which is a convenience method that internally invokes <code>RequestCycle.get()</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> RequestCycle getRequestCycle() &#123;
 	<span class="java&#45;keyword">return</span> RequestCycle.get();
@@ -1263,8 +1264,8 @@
 <ul class="star">
 <li>a page class, via the <code>urlFor(Class&#60;C&#62; pageClass, PageParameters parameters)</code> method</li>
 <li>an IRequestHandler via the <code>urlFor(IRequestHandler handler)</code> method</li>
-<li>a ResourceReference via the <code>urlFor(ResourceReference reference, PageParameters params)</code> method (resource entities will be introduced in chapter 13).</li>
-</ul><p class="paragraph"/>The overloaded <code>urlFor</code> method from above also has a corresponding version that returns an instance of <code>org.apache.wicket.request.Url</code> instead of a <code>CharSequence</code>. This version has the prefix 'map' in its name (i.e. it has <code>mapUrlFor</code> as full name).<p class="paragraph"/><h3>Method setResponsePage</h3><p class="paragraph"/>The <code>RequestCycle</code> class contains the implementation of the <code>setResponsePage</code> method we use to redirect a user to a specific page (see paragraph 2.4). The namesake method of class <code>org.apache.wicket.Component</code> is just a convenience method that internally invokes the actual implementation on current request cycle:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> void setResponsePage(<span class="java&#45;keyword">final</span> Page page) &#123;
+<li>a ResourceReference via the <code>urlFor(ResourceReference reference, PageParameters params)</code> method (resource entities will be introduced in <a href="../guide/single.html#resources" class="guide">chapter 15</a>).</li>
+</ul><p class="paragraph"/>The overloaded <code>urlFor</code> method from above also has a corresponding version that returns an instance of <code>org.apache.wicket.request.Url</code> instead of a <code>CharSequence</code>. This version has the prefix 'map' in its name (i.e. it has <code>mapUrlFor</code> as full name).<p class="paragraph"/><h3>Method setResponsePage</h3><p class="paragraph"/>The <code>RequestCycle</code> class contains the implementation of the <code>setResponsePage</code> method we use to redirect a user to a specific page (see <a href="../guide/single.html#helloWorld_4" class="guide">paragraph 4.4</a>). The namesake method of class <code>org.apache.wicket.Component</code> is just a convenience method that internally invokes the actual implementation on current request cycle:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> void setResponsePage(<span class="java&#45;keyword">final</span> Page page) &#123;
 	getRequestCycle().setResponsePage(page);
 &#125;</pre></div><p class="paragraph"/><h3>RequestCycle's hook methods and listeners</h3><p class="paragraph"/>The RequestCycle comes with some hook methods which can be overridden to perform custom actions when request handling reaches a specific stage. These methods are:
 <ul class="star">
@@ -1299,7 +1300,7 @@
 <li><strong class="bold">setAttribute(String name, Serializable value):</strong> creates an attribute identified by the given name. If the session already contains an attribute with the same name, the new value will replace the existing one. The value must be a serializable object.</li>
 <li><strong class="bold">getAttribute(String name):</strong> returns the value of the attribute identified by the given name, or null if the name does not correspond to any attribute.</li>
 <li><strong class="bold">removeAttribute(String name):</strong> removes the attribute identified by the given name.</li>
-</ul><p class="paragraph"/>By default class WebSession will use the underlying http session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().<p class="paragraph"/><h3>Accessing to the HTTP session</h3><p class="paragraph"/>If for any reason we need to directly access to the underlying HttpSession object, we can retrieve it from the current request with the following code:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get()
+</ul><p class="paragraph"/>By default class WebSession will use the underlying HTTP session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().<p class="paragraph"/><h3>Accessing to the HTTP session</h3><p class="paragraph"/>If for any reason we need to directly access to the underlying HttpSession object, we can retrieve it from the current request with the following code:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get()
 		.getRequest()).getContainerRequest().getSession();</pre></div><p class="paragraph"/>Using the raw session object might be necessary if we have to set a session attribute with a particular name without the prefix added by Wicket. Let's say for example that we are working with Tomcat as web server. One of the administrative tools provided by Tomcat is a page listing all the active user sessions of a given web application:<p class="paragraph"/><img border="0" class="center" src="../img/tomcat-admin-sessions.png"></img><p class="paragraph"/>Tomcat allows us to set the values that will be displayed in columns “Guessed locale” and “Guessed User name”. One possible way to do this is to use session attributes named “Locale” and “userName” but we can't create them via Wicket's Session class because they would not have exactly the name required by Tomcat. Instead, we must use the raw HttpSession and set our attributes on it:<p class="paragraph"/><div class="code"><pre>HttpSession session = ((ServletWebRequest)RequestCycle.get().
 		getRequest()).getContainerRequest().getSession();<p class="paragraph"/>session.setAttribute(<span class="java&#45;quote">"Locale"</span>, <span class="java&#45;quote">"ENGLISH"</span>);
 session.setAttribute(<span class="java&#45;quote">"userName"</span>, <span class="java&#45;quote">"Mr BadGuy"</span>);</pre></div><p class="paragraph"/><h3>Temporary and permanent sessions</h3><p class="paragraph"/>Wicket doesn't need to store data into user session as long as the user visits only stateless pages. Nonetheless, even under these conditions, a temporary session object is created to process each request but it is discarded at the end of the current request. To know if the current session is temporary, we can use the isTemporary() method:<p class="paragraph"/><div class="code"><pre>Session.get().isTemporary();</pre></div><p class="paragraph"/>If a session is not temporary (i.e. it is permanent), it's identified by an unique id which can be read calling the getId() method. This value will be null if the session is temporary.<p class="paragraph"/>Although Wicket is able to automatically recognize when it needs to replace a temporary session with a permanent one, sometimes we may need to manually control this process to make our initially temporary session permanent.<p class="paragraph"/>To illustrate this possible scenario let's consider project BindSessionExample where we have a stateless home page which sets a session attribute inside its constructor and then it redirects the user to another page which displays with a label the session attribute previously created. The code of the two pages is as follows:<p class="paragraph"/>Home page:
@@ -1357,11 +1358,12 @@
 
 
 <h2 id="requestProcessing_6">9.6 Summary</h2>
-<p class="paragraph"/>In this chapter we had a look at how Wicket internally handles a web request. Even if most of the time  we won't need to customize this internal process, knowing how it works is essential to use the framework at 100%.<p class="paragraph"/>Entities like Application and Session will come in handy again when we will tackle the topic of security in chapter 20.
+<p class="paragraph"/>In this chapter we had a look at how Wicket internally handles a web request. Even if most of the time  we won't need to customize this internal process, knowing how it works is essential to use the framework at 100%.<p class="paragraph"/>Entities like Application and Session will come in handy again when we will tackle the topic of security in <a href="../guide/single.html#security" class="guide">chapter 21</a>.
 
 
+
 <h1 id="urls">10 Wicket Links and URL generation</h1>
-Up to now we used component Link to move from a page to another and we have seen that it is quiet similar to a “click” event handler (see paragraph 2.4).<p class="paragraph"/>However this component alone is not enough to build all possible kinds of links we may need in our pages. Therefore, Wicket offers other link components suited for those tasks which can not be accomplished with a basic Link.<p class="paragraph"/>Besides learning new link components, in this chapter we will also see how to customize the page URL generated by Wicket using the encoding facility provided by the framework and the page parameters that can be passed to a target page.
+Up to now we used component Link to move from a page to another and we have seen that it is quiet similar to a “click” event handler (see <a href="../guide/single.html#helloWorld_4" class="guide">paragraph 4.4</a>).<p class="paragraph"/>However this component alone is not enough to build all possible kinds of links we may need in our pages. Therefore, Wicket offers other link components suited for those tasks which can not be accomplished with a basic Link.<p class="paragraph"/>Besides learning new link components, in this chapter we will also see how to customize the page URL generated by Wicket using the encoding facility provided by the framework and the page parameters that can be passed to a target page.
 
 
 
@@ -1467,7 +1469,7 @@
 
 
 <h2 id="urls_6">10.6 Generating structured and clear URLs</h2>
-<p class="paragraph"/>Having structured URLs in our site is a basic requirement if we want to build an efficient SEO1 strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.<p class="paragraph"/><h3>Mounting a single page</h3><p class="paragraph"/>With Wicket we can mount a page to a given path in much the same way as we map a servlet filer to a desired path inside file web.xml (see page 9). Using mountPage(String path, Class &#60;T&#62; pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:<p class="paragraph"/><div class="code"><pre>@Override
+<p class="paragraph"/>Having structured URLs in our site is a basic requirement if we want to build an efficient SEO strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.<p class="paragraph"/><h3>Mounting a single page</h3><p class="paragraph"/>With Wicket we can mount a page to a given path in much the same way as we map a servlet filter to a desired path inside file web.xml (see <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2</a>). Using mountPage(String path, Class &#60;T&#62; pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
 	<span class="java&#45;keyword">super</span>.init();
@@ -1476,14 +1478,14 @@
 &#125;</pre></div><p class="paragraph"/>The path provided to mountPage will be used to generate the URL for any page of the specified class:<p class="paragraph"/><div class="code"><pre>//it will <span class="java&#45;keyword">return</span> <span class="java&#45;quote">"/pageMount"</span>
 RequestCycle.get().urlFor(MountedPage.class);</pre></div><p class="paragraph"/>Under the hood the mountPage method mounts an instance of the request mapper <code>org.apache.wicket.request.mapper.MountedMapper</code> configured for the given path:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> &#60;T <span class="java&#45;keyword">extends</span> Page&#62; void mountPage(<span class="java&#45;keyword">final</span> <span class="java&#45;object">String</span> path,<span class="java&#45;keyword">final</span> <span class="java&#45;object">Class</span>&#60;T&#62; pageClass) &#123;
 	mount(<span class="java&#45;keyword">new</span> MountedMapper(path, pageClass));
-&#125;</pre></div><p class="paragraph"/>Request mappers and the Application's method mount have been introduced in the previous chapter (paragraph 9.3).<p class="paragraph"/><h3>Using parameter placeholders with mounted pages</h3><p class="paragraph"/>The path specified for mounted pages can contain dynamic segments which are populated with the values of the named parameters used to build the page. These segments are declared using special segments called parameter placeholders. Consider the path used in the following example:<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/$&#123;foo&#125;/otherSegm"</span>, MountedPageWithPlaceholder.class);</pre></div><p class="paragraph"/>The path used above is composed by three segments: the first and the last are fixed while the second will be replaced by the value of the named parameter foo that must be provided when the page  MountedPageWithPlaceholder is instantiated:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
+&#125;</pre></div><p class="paragraph"/>Request mappers and the Application's method mount have been introduced in the previous chapter (<a href="../guide/single.html#requestProcessing_3" class="guide">paragraph 9.3</a>).<p class="paragraph"/><h3>Using parameter placeholders with mounted pages</h3><p class="paragraph"/>The path specified for mounted pages can contain dynamic segments which are populated with the values of the named parameters used to build the page. These segments are declared using special segments called parameter placeholders. Consider the path used in the following example:<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/$&#123;foo&#125;/otherSegm"</span>, MountedPageWithPlaceholder.class);</pre></div><p class="paragraph"/>The path used above is composed by three segments: the first and the last are fixed while the second will be replaced by the value of the named parameter foo that must be provided when the page  MountedPageWithPlaceholder is instantiated:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
 pageParameters.add(<span class="java&#45;quote">"foo"</span>, <span class="java&#45;quote">"foo"</span>);<p class="paragraph"/>setResponsePage(MountedPageWithPlaceholder.class, pageParameters)</pre></div><p class="paragraph"/>Generated URL:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/pageMount/foo/otherSegm</pre></div><p class="paragraph"/>On the contrary if we manually insert an URL like '&#60;web app path&#62;/pageMount/bar/otherSegm', we can read value 'bar' retrieving the named parameter foo inside our page.<p class="paragraph"/>Place holders can be declared as optional using the '#' character in place of '$':<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/&#35;&#123;foo&#125;/otherSegm"</span>, MountedPageOptionalPlaceholder.class);</pre></div><p class="paragraph"/>If the named parameter for an optional placeholder is missing, the corresponding segment is removed from the final URL:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
 setResponsePage(MountedPageWithPlaceholder.class, pageParameters);</pre></div><p class="paragraph"/>Generated URL:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/pageMount/otherSegm</pre></div><p class="paragraph"/><h3>Mounting a package</h3><p class="paragraph"/>In addition to mounting a single page, Wicket allows to mount all of the pages inside a package to a given path. Method mountPackage(String path, Class&#60;T&#62; pageClass) of class WepApplication will mount every page inside pageClass's package to the specified path.<p class="paragraph"/>The resulting URL for package-mounted pages will have the following structure:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/mountedPath/&#60;PageClassName&#62;&#91;optional query string&#93;</pre></div><p class="paragraph"/>For example in the MountedPagesExample project we have mounted all pages inside the subpackage org.tutorialWicket.subPackage with this line of code:<p class="paragraph"/><div class="code"><pre>mountPackage(<span class="java&#45;quote">"/mountPackage"</span>, StatefulPackageMount.class);</pre></div><p class="paragraph"/>StatefulPackageMount is one of the pages placed into the desired package and its URL will be:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/mountPackage/StatefulPackageMount?1</pre></div><p class="paragraph"/>Similarly to what is done by the mountPage method, the implementation of the mountPackage method mounts an instance of <code>org.apache.wicket.request.mapper.PackageMapper</code> to the given path.<p class="paragraph"/><h3>Providing custom mapper context to request mappers</h3><p class="paragraph"/>Interface <code>org.apache.wicket.request.mapper.IMapperContext</code> is used by request mappers to create new page instances and to retrieve static URL segments used to build and parse page URLs. Here is the list of these segments:
 <ul class="star">
 <li>Namespace: it's the first URL segment of non-mounted pages. By default its value is wicket.</li>
 <li>Identifier for non-bookmarkable URLs: it's the segment that identifies non bookmarkable pages. By default its value is page.</li>
-<li>Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in paragraph 8.1.1).</li>
-<li>Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in chapter 13.</li>
+<li>Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in <a href="../guide/single.html#urls_1" class="guide">paragraph 10.1.1</a>).</li>
+<li>Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in <a href="../guide/single.html#resources" class="guide">chapter 15</a>.</li>
 </ul><p class="paragraph"/>IMapperContext provides a getter method for any segment listed above. By default Wicket uses class <code>org.apache.wicket.DefaultMapperContext</code> as mapper context.<p class="paragraph"/>Project CustomMapperContext is an example of customization of mapper context where we use index as identifier for non-bookmarkable pages and staticURL as identifier for bookmarkable pages. In this project, instead of implementing our mapper context from scratch, we used DefaultMapperContext as base class overriding just the two methods we need to achieve the desired result (getBookmarkableIdentifier() and getPageIdentifier()).  The final implementation is the following:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class CustomMapperContext <span class="java&#45;keyword">extends</span> DefaultMapperContext&#123;<p class="paragraph"/>	@Override
 	<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> getBookmarkableIdentifier() &#123;
 		<span class="java&#45;keyword">return</span> <span class="java&#45;quote">"staticURL"</span>;
@@ -1537,10 +1539,11 @@
 		<span class="java&#45;keyword">return</span> <span class="java&#45;keyword">new</span> Date().toString();
 	&#125;
 &#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"timeStamp"</span>, timeStampModel));</pre></div><p class="paragraph"/>Even if sometimes writing a custom model could be a good choice to solve a specific problem, Wicket already provides a set of IModel implementations which should fit most of our needs. In the next paragraph we will see a couple of models that allow us to easily integrate JavaBeans with our web applications and in particular with our forms.<p class="paragraph"/><blockquote class="note">
-By default class Component escapes HTML sensitive characters (like '&#60;', '&#62;' or '&#38;') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML <a href="http://en.wikipedia.org/wiki/Character_entity_reference" target="blank">entity</a> (for example '&#60;' becomes '&#38;lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
+By default the class Component escapes HTML sensitive characters (like '&#60;', '&#62;' or '&#38;') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML <a href="http://en.wikipedia.org/wiki/Character_entity_reference" target="blank">entity</a> (for example '&#60;' becomes '&#38;lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
 </blockquote>
 
 
+
 <h2 id="modelsforms_2">11.2 Models and JavaBeans</h2>
 <p class="paragraph"/>One of the main goals of Wicket is to use JavaBeans and POJO as data model, overcoming the impedance mismatch between web technologies and OO paradigm. In order to make this task as easy as possible, Wicket offers two special model classes: <code>org.apache.wicket.model.PropertyModel</code> and <code>org.apache.wicket.model.CompoundPropertyModel</code>. We will see how to use them in the next two examples, using the following JavaBean as the data object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class Person <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> surname;
@@ -1801,11 +1804,12 @@
 
 
 <h1 id="forms2">12 Wicket forms in detail</h1>
-In the previous chapter we have only scratched the surface of Wicket forms. The Form component was not only designed to collect user input but also to extend the semantic of the classic HTML forms with new features.<p class="paragraph"/>One of such features is the ability to work with nested forms (they will be discussed in paragraph 10.5).<p class="paragraph"/>In this chapter we will continue to explore Wicket forms learning how to master them and how to build effective and user-proof forms for our web applications.
+In the previous chapter we have only scratched the surface of Wicket forms. The Form component was not only designed to collect user input but also to extend the semantic of the classic HTML forms with new features.<p class="paragraph"/>One of such features is the ability to work with nested forms (they will be discussed in <a href="../guide/single.html#forms2_6" class="guide">paragraph 12.6</a>).<p class="paragraph"/>In this chapter we will continue to explore Wicket forms learning how to master them and how to build effective and user-proof forms for our web applications.
 
 
+
 <h2 id="forms2_1">12.1 Default form processing</h2>
-<p class="paragraph"/>In paragraph 9.3 we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
+<p class="paragraph"/>In <a href="../guide/single.html#modelsforms_3" class="guide">paragraph 11.3</a> we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
 <ol>
 <li>Form validation: user input is checked to see if it satisfies the validation rules set on the form. If validation fails, step number 2 is skipped and the form should display a feedback message to explain to user what went wrong. During this step input values (which are simple strings sent with a web request) are converted into Java objects. In the next paragraphs we will explore the infrastructures provided by Wicket for the three sub-tasks involved with form validation, which are: conversion of user input into objects, validation of user input, and visualization of feedback messages.</li>
 <li>Updating of models: if validation succeeds, the form updates the model of its children components with the converted values obtained in the previous step.</li>
@@ -1812,15 +1816,16 @@
 <li>Invoking callback methods onSubmit() or onError(): if we didn't have any validation error, method onSubmit() is called, otherwise onError() will be called. The default implementation of both these methods is left empty and we can override them to perform custom actions.</li>
 </ol><p class="paragraph"/><blockquote class="note">
 Please note that the model of form components is updated only if no validation error occurred (i.e. step two is performed only if validation succeeds). 
-</blockquote><p class="paragraph"/>Without going into too much detail, we can say that the first two steps of form processing correspond to the invocation of one or more Form's internal methods (which are declared protected and final). Some examples of these methods are validate(), which is invoked during validation step, and updateFormComponentModels(), which is used at the step that updates the form field models.<p class="paragraph"/>The whole form processing is started invoking public method process(IFormSubmitter) (Later in paragraph 10.4 we will introduce interface IFormSubmitter). 
+</blockquote><p class="paragraph"/>Without going into too much detail, we can say that the first two steps of form processing correspond to the invocation of one or more Form's internal methods (which are declared protected and final). Some examples of these methods are validate(), which is invoked during validation step, and updateFormComponentModels(), which is used at the step that updates the form field models.<p class="paragraph"/>The whole form processing is started invoking public method process(IFormSubmitter) (Later in <a href="../guide/single.html#forms2_5" class="guide">paragraph 12.5</a> we will introduce interface IFormSubmitter). 
 
 
+
 <h2 id="forms2_2">12.2 Form validation and feedback messages</h2>
-<p class="paragraph"/>A basic example of a validation rule is to make a field required. In paragraph 9.3.2 we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.<p class="paragraph"/>A validator is an implementation of the <code>org.apache.wicket.validation.IValidator</code> interface and the <code>FormComponent</code> has a version of method add which takes as input a reference of this interface.<p class="paragraph"/>For example if we want to use a text field to insert an email address, we could use the built-in validator  EmailAddressValidator to ensure that the inserted input will respect the email format <a href="http://en.wikipedia.org/wiki/Email_address" target="blank">local-part@domain</a> :<p class="paragraph"/><div class="code"><pre>TextField email = <span class="java&#45;keyword">new</span> TextField(<span class="java&#45;quote">"email"</span>);
-email.add(EmailAddressValidator.getInstance());</pre></div><p class="paragraph"/>Wicket comes with a set of built-in validators that should suit most of our needs. We will see them in paragraph 10.2.3.<p class="paragraph"/><h3>Feedback messages and localization</h3><p class="paragraph"/>Wicket generates a feedback message for each field that doesn't satisfy one of its validation rules. For example the message generated when a required field is left empty is the following<p class="paragraph"/><code>Field '&#60;label&#62;' is required.</code><p class="paragraph"/>&#60;label&#62; is the value of the label model set on a FormComponent with method setLabel(IModel &#60;String&#62; model). If such model is not provided, component id will be used as the default value.<p class="paragraph"/>The entire infrastructure of feedback messages is built on top of the Java internationalization (I18N) support and it uses <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html" target="blank">resource bundles</a> to store messages.<p class="paragraph"/><blockquote class="note">
-The topics of internationalization will be covered in chapter 12. For now we will give just few notions needed to understand the examples from this chapter.
-</blockquote><p class="paragraph"/>By default resource bundles are stored into properties files but we can easily configure other sources as described later in paragraph 12.4.5.<p class="paragraph"/>Default feedback messages (like the one above for required fields) are stored in the file Application. properties placed inside Wicket the org.apache.wicket package. Opening this file we can find the key and the localized value of the message:<p class="paragraph"/><code>Required=Field '$&#123;label&#125;' is required.</code><p class="paragraph"/>We can note the key (Required in our case) and the label parameter written in the <a href="http://en.wikipedia.org/wiki/Expression_Language" target="blank">expression language</a> (${label}). Scrolling down this file we can also find the message used by the Email AddressValidator:<p class="paragraph"/><code>EmailAddressValidator=The value of '${label}' is not a valid email address.</code><p class="paragraph"/>By default FormComponent provides 3 parameters for feedback message: input (the value that failed validation), label and name (this later is the id of the component).<p class="paragraph"/><blockquote class="warning">
-Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used in paragraph 10.2.5)
+<p class="paragraph"/>A basic example of a validation rule is to make a field required. In <a href="../guide/single.html#modelsforms_3" class="guide">paragraph 11.3</a> we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.<p class="paragraph"/>A validator is an implementation of the <code>org.apache.wicket.validation.IValidator</code> interface and the <code>FormComponent</code> has a version of method add which takes as input a reference of this interface.<p class="paragraph"/>For example if we want to use a text field to insert an email address, we could use the built-in validator  EmailAddressValidator to ensure that the inserted input will respect the email format <a href="http://en.wikipedia.org/wiki/Email_address" target="blank">local-part@domain</a> :<p class="paragraph"/><div class="code"><pre>TextField email = <span class="java&#45;keyword">new</span> TextField(<span class="java&#45;quote">"email"</span>);
+email.add(EmailAddressValidator.getInstance());</pre></div><p class="paragraph"/>Wicket comes with a set of built-in validators that should suit most of our needs. We will see them later in this chapter.<p class="paragraph"/><h3>Feedback messages and localization</h3><p class="paragraph"/>Wicket generates a feedback message for each field that doesn't satisfy one of its validation rules. For example the message generated when a required field is left empty is the following<p class="paragraph"/><code>Field '&#60;label&#62;' is required.</code><p class="paragraph"/>&#60;label&#62; is the value of the label model set on a FormComponent with method setLabel(IModel &#60;String&#62; model). If such model is not provided, component id will be used as the default value.<p class="paragraph"/>The entire infrastructure of feedback messages is built on top of the Java internationalization (I18N) support and it uses <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html" target="blank">resource bundles</a> to store messages.<p class="paragraph"/><blockquote class="note">
+The topics of internationalization will be covered in <a href="../guide/single.html#i18n" class="guide">chapter 14</a>. For now we will give just few notions needed to understand the examples from this chapter.
+</blockquote><p class="paragraph"/>By default resource bundles are stored into properties files but we can easily configure other sources as described later in <a href="../guide/single.html#i18n_2" class="guide">paragraph 14.2</a>.<p class="paragraph"/>Default feedback messages (like the one above for required fields) are stored in the file Application. properties placed inside Wicket the org.apache.wicket package. Opening this file we can find the key and the localized value of the message:<p class="paragraph"/><code>Required=Field '$&#123;label&#125;' is required.</code><p class="paragraph"/>We can note the key (Required in our case) and the label parameter written in the <a href="http://en.wikipedia.org/wiki/Expression_Language" target="blank">expression language</a> (${label}). Scrolling down this file we can also find the message used by the Email AddressValidator:<p class="paragraph"/><code>EmailAddressValidator=The value of '${label}' is not a valid email address.</code><p class="paragraph"/>By default FormComponent provides 3 parameters for feedback message: input (the value that failed validation), label and name (this later is the id of the component).<p class="paragraph"/><blockquote class="warning">
+Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used later in this chapter)
 </blockquote><p class="paragraph"/><h3>Displaying feedback messages and filtering them</h3><p class="paragraph"/>To display feedback messages we must use component <code>org.apache.wicket.markup.html.panel.FeedbackPanel</code>. This component automatically reads all the feedback messages generated during form validation and displays them with an unordered list:<p class="paragraph"/><div class="code"><pre>&#60;ul class=<span class="java&#45;quote">"feedbackPanel"</span>&#62; 
 	&#60;li class=<span class="java&#45;quote">"feedbackPanelERROR"</span>&#62; 
 		&#60;span class=<span class="java&#45;quote">"feedbackPanelERROR"</span>&#62;Field 'Username' is required.&#60;/span&#62; 
@@ -1829,7 +1834,7 @@
 <ul class="star">
 <li><strong class="bold">ComponentFeedbackMessageFilter</strong>: shows only messages coming from a specific component.</li>
 <li><strong class="bold">ContainerFeedbackMessageFilter</strong>: shows only messages coming from a specific container or from any of its children components.</li>
-<li><strong class="bold">ErrorLevelFeedbackMessageFilter</strong>: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed in paragraph 10.2.6.</li>
+<li><strong class="bold">ErrorLevelFeedbackMessageFilter</strong>: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed later in this chapter.</li>
 </ul><p class="paragraph"/>These filters are intended to be used when there are more than one feedback panel (or more than one form) in the same page. We can pass a filter to a feedback panel via its constructor or using the setFilter method. Custom filters can be created implementing the IFeedbackMessageFilter interface. An example of custom filter is illustrated later in this paragraph.<p class="paragraph"/><h3>Built-in validators</h3><p class="paragraph"/>Wicket already provides a number of built-in validators ready to be used. The following table is a short reference where validators are listed along with a brief description of what they do. The default feedback message used by each of them is reported as well:<p class="paragraph"/><h4>EmailAddressValidator</h4><p class="paragraph"/>Checks if input respects the format local-part&#64;domain.<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The value of '${label}' is not a valid email address.</code><p class="paragraph"/><h4>UrlValidator</h4><p class="paragraph"/>Checks if input is a valid URL. We can specify in the constructor which protocols are allowed (http://, https://, and ftp://).<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The value of '${label}' is not a valid URL.</code><p class="paragraph"/><h4>DateValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get date validators to check if a date is bigger than a lower bound (method minimum(Date min)), smaller than a upper bound (method maximum(Date max)) or inside a range (method range(Date min, Date max)).<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' is less than the minimum of ${minimum}.</code><p class="paragraph"/><code>The value of '${label}' is larger than the maximum of ${maximum}.</code><p class="paragraph"/><code>The value of '${label}' is not between ${minimum} and ${maximum}.</code><p class="paragraph"/><h4>RangeValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get validators to check if a value is bigger than a given lower bound (method minimum(T min)), smaller than a upper bound (method maximum(T max)) or inside a range (method range(T min,T max)).<p class="paragraph"/>The type of the value is a generic subtype of java.lang.Comparable and must implement Serializable interface.<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' must be at least ${minimum}.</code><p class="paragraph"/><code>The value of '${label}' must be at most ${maximum}.</code><p class="paragraph"/><code>The value of '${label}' must be between ${minimum} and ${maximum}.</code><p class="paragraph"/><h4>StringValidator</h4><p class="paragraph"/>Validator class that can be extended or used as a factory class to get validators to check if the length of a string value is bigger then a given lower bound (method minimumLength (int min)), smaller then a given upper bound (method maximumLength (int max)) or within a given range (method lengthBetween(int min, int max)).<p class="paragraph"/>To accept only string values consisting of exactly n characters, we must use method exactLength(int length).<p class="paragraph"/><strong class="bold">Messages:</strong><p class="paragraph"/><code>The value of '${label}' is shorter than the minimum of ${minimum} characters.</code><p class="paragraph"/><code>The value of '${label}' is longer than the maximum of ${maximum} characters.</code><p class="paragraph"/><code>The value of '${label}' is not between ${minimum} and ${maximum} characters long.</code><p class="paragraph"/><code>The value of '${label}' is not exactly ${exact} characters long.</code><p class="paragraph"/><h4>CreditCardValidator</h4><p class="paragraph"/>Checks if input is a valid credit card number. This validator supports some of the most popular credit cards (like “American Express", "MasterCard", “Visa” or “Diners Club”).<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>The credit card number is invalid.</code><p class="paragraph"/><h4>EqualPasswordInputValidator</h4><p class="paragraph"/>This validator checks if two password fields have the same value.<p class="paragraph"/><strong class="bold">Message:</strong><p class="paragraph"/><code>${label0} and ${label1} must be equal.</code><p class="paragraph"/><h3>Overriding standard feedback messages with custom bundles</h3><p class="paragraph"/>If we don't like the default validation feedback messages, we can override them providing custom properties files. In these files we can write our custom messages using the same keys of the messages we want to override. For example if we wanted to override the default message for invalid email addresses, our properties file would contain a line like this:<p class="paragraph"/><code>EmailAddressValidator=Man, your email address is not good!</code><p class="paragraph"/>As we will see in the next chapter, Wicket searches for custom properties files in various positions inside the application's class path, but for now we will consider just the properties file placed next to our application class. The name of this file must be equal to the name of our application class:<p class="paragraph"/><img border="0" class="center" src="../img/custom-properties-file.png"></img><p class="paragraph"/>The example project OverrideMailMessage overrides email validator's message with a new one which also reports the value that failed validation:<p class="paragraph"/><code>EmailAddressValidator=The value '${input}' inserted for field '${label}' is not a valid email address.</code><p class="paragraph"/><img border="0" class="center" src="../img/validation-error-message.png"></img><p class="paragraph"/><h3>Creating custom validators</h3><p class="paragraph"/>If our web application requires a complex validation logic and built-in validators are not enough, we can  implement our own custom validators. For example (project UsernameCustomValidator) suppose we are working on the registration page of our site where users can create their profile choosing their username. Our registration form should validate the new username checking if it was already chosen by another user. In a situation like this we may need to implement a custom validator that queries a specific data source to check if a username is already in use.<p class="paragraph"/>For the sake of simplicity, the validator of our example will check the given username against a fixed list of three existing usernames.<p class="paragraph"/>A custom validator must simply implement interface IValidator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class UsernameValidator <span class="java&#45;keyword">implements</span> IValidator&#60;<span class="java&#45;object">String</span>&#62; &#123;
 	List&#60;<span class="java&#45;object">String</span>&#62; existingUsernames = Arrays.asList(<span class="java&#45;quote">"bigJack"</span>, <span class="java&#45;quote">"anonymous"</span>, <span class="java&#45;quote">"mrSmith"</span>);<p class="paragraph"/>	<span class="java&#45;keyword">public</span> void validate(IValidatable&#60;<span class="java&#45;object">String</span>&#62; validatable) &#123;
 		<span class="java&#45;object">String</span> chosenUserName = validatable.getValue();<p class="paragraph"/>		<span class="java&#45;keyword">if</span>(existingUsernames.contains(chosenUserName))&#123;
@@ -1919,7 +1924,7 @@
 	<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> convertToString(Pattern value, Locale locale) &#123;
 		<span class="java&#45;keyword">return</span> value.toString();
 	&#125;
-&#125;</pre></div><p class="paragraph"/>Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in chapter 12.<p class="paragraph"/>Once we have implemented our custom converter, we must override method newConverterLocator() inside our application class and tell it to add our new converter to the default set:<p class="paragraph"/><div class="code"><pre>@Override
+&#125;</pre></div><p class="paragraph"/>Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in <a href="../guide/single.html#i18n" class="guide">paragraph 14</a>.<p class="paragraph"/>Once we have implemented our custom converter, we must override method newConverterLocator() inside our application class and tell it to add our new converter to the default set:<p class="paragraph"/><div class="code"><pre>@Override
 	<span class="java&#45;keyword">protected</span> IConverterLocator newConverterLocator() &#123;
 		ConverterLocator defaultLocator = <span class="java&#45;keyword">new</span> ConverterLocator();<p class="paragraph"/>		defaultLocator.set(Pattern.class, <span class="java&#45;keyword">new</span> RegExpPatternConverter());<p class="paragraph"/>		<span class="java&#45;keyword">return</span> defaultLocator;
 	&#125;</pre></div><p class="paragraph"/>Finally, in the home page of the project we build the form which displays (with a flash message) the tokens obtained splitting the string with the given pattern:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class HomePage <span class="java&#45;keyword">extends</span> WebPage &#123;
@@ -1946,6 +1951,7 @@
 </blockquote>
 
 
+
 <h2 id="forms2_4">12.4 Validation with JSR 303</h2>
 Standard JSR 303 defines a set of annotations and APIs to validate our domain objects at field-level. Wicket has introduced an experimental support for this standard since version 6.4.0 and with version 6.14.0 it has became an official Wicket model (named <code>wicket-bean-validation</code>).
 In this paragraph we will see the basic steps needed to use JSR 303 validation in our Wicket application. Code snippets are from example project <code>JSR303validation</code>.<p class="paragraph"/>In the example application we have a form to insert the data for a new <code>Person</code> bean and its relative <code>Address</code>. The code for class <code>Person</code> is the following<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class Person <span class="java&#45;keyword">implements</span> Serializable&#123;<p class="paragraph"/>	@NotNull
@@ -2083,7 +2089,7 @@
 
 
 <h2 id="forms2_9">12.9 Creating complex form components with FormComponentPanel</h2>
-<p class="paragraph"/>In chapter 3.2.2 we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.<p class="paragraph"/>While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow.<p class="paragraph"/>This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the <code>org.apache.wicket.markup.html.form.FormComponentPanel</code> component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent).<p class="paragraph"/>A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data.<p class="paragraph"/>To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).<p class="paragraph"/>The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the <a href="http://en.wikipedia.org/wiki/International_System_of_Units" target="blank">International System of Units</a> , so it makes perfect sense to store temperatures expressed with this unit of measurement.<p class="paragraph"/>However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user.<p class="paragraph"/>In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.<p class="paragraph"/>Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:<p class="paragraph"/><div class="code"><pre>&#60;html&#62;
+<p class="paragraph"/>In <a href="../guide/single.html#layout_2" class="guide">chapter 5.2.2</a> we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.<p class="paragraph"/>While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow.<p class="paragraph"/>This could be a strong limitation if the custom component needs to coordinate its children during sub-tasks like input conversion or model updating. That's why in Wicket we have the <code>org.apache.wicket.markup.html.form.FormComponentPanel</code> component which combines the features of a Panel (it has its own markup file) and a FormComponent (it is a subclass of FormComponent).<p class="paragraph"/>A typical scenario in which we may need to implement a custom FormComponentPanel is when our web application and its users work with different units of measurement for the same data.<p class="paragraph"/>To illustrate this possible scenario, let's consider a form where a user can insert a  temperature that will be recorded after being converted to Kelvin degrees (see the example project CustomForm ComponentPanel).<p class="paragraph"/>The Kelvin scale is wildly adopted among the scientific community and it is one of the seven base units of the <a href="http://en.wikipedia.org/wiki/International_System_of_Units" target="blank">International System of Units</a> , so it makes perfect sense to store temperatures expressed with this unit of measurement.<p class="paragraph"/>However, in our everyday life we still use other temperature scales like Celsius or Fahrenheit, so it would be nice to have a component which internally works with Kelvin degrees and automatically applies conversion between Kelvin temperature scale and the one adopted by the user.<p class="paragraph"/>In order to implement such a component, we can make a subclass of FormComponentPanel and leverage the convertInput and onBeforeRender methods: in the implementation of the convertInput method we will convert input value to Kelvin degrees while in the implementation of onBeforeRender method we will take care of converting the Kelvin value to the temperature scale adopted by the user.<p class="paragraph"/>Our custom component will contain two children components: a text field to let user insert and edit a temperature value and a label to display the letter corresponding to user's temperature scale (F for Fahrenheit and C for Celsius). The resulting markup file is the following:<p class="paragraph"/><div class="code"><pre>&#60;html&#62;
 &#60;head&#62;
 &#60;/head&#62;
 &#60;body&#62;
@@ -2110,7 +2116,7 @@
 		add(userDegree=<span class="java&#45;keyword">new</span> TextField&#60;<span class="java&#45;object">Double</span>&#62;(<span class="java&#45;quote">"registeredTemperature"</span>, <span class="java&#45;keyword">new</span> 
                            Model&#60;<span class="java&#45;object">Double</span>&#62;()));
 		userDegree.setType(<span class="java&#45;object">Double</span>.class);
-	&#125;</pre></div><p class="paragraph"/>Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in chapter 12). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius.<p class="paragraph"/>In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object.<p class="paragraph"/>Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:<p class="paragraph"/><div class="code"><pre>// continued example
+	&#125;</pre></div><p class="paragraph"/>Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in <a href="../guide/single.html#i18n" class="guide">paragraph 14</a>). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius.<p class="paragraph"/>In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object.<p class="paragraph"/>Now we can look at the rest of the code containing the convertInput and onBeforeRender methods:<p class="paragraph"/><div class="code"><pre>// continued example
 	@Override
 	<span class="java&#45;keyword">protected</span> void convertInput() &#123;
 		<span class="java&#45;object">Double</span> userDegreeVal = userDegree.getConvertedInput();
@@ -2135,8 +2141,9 @@
 &#125;</pre></div><p class="paragraph"/>Since our component does not directly receive the user input, convertInput() must read this value from the inner text field using FormComponent's getConvertedInput() method which returns the input value already converted to the type specified for the component (Double in our case). Once we have the user input we convert it to kelvin degrees and we use the resulting value to set the converted input for our custom component (using method setConvertedInput(T convertedInput)).<p class="paragraph"/>Method onBeforeRender() is responsible for synchronizing the model of the inner textfield with the model of our custom component. To do this we retrieve the model object of the custom component with the getDefaultModelObject() method, then we convert it to the temperature scale adopted by the user and finally we use this value to set the model object of the text field.
 
 
+
 <h2 id="forms2_10">12.10 Stateless form</h2>
-<p class="paragraph"/>In chapter 6 we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).<p class="paragraph"/>Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page.<p class="paragraph"/>For this kind of page we might encounter two potential problems if we chose to use a stateful page. The first problem occurs when the user tries to login without a valid session assigned to him. This could happen if the user leaves the login page opened for a period of time bigger than the session's timeout and then he decides to log in. Under these conditions the user will be redirected to a 'Page expired' error page, which is not exactly a nice thing for user experience.<p class="paragraph"/>The second problem occurs when a malicious user or a web crawler program attempts to login into our web application, generating a huge number of page versions and consequently increasing the size of the user session.<p class="paragraph"/>To avoid these kinds of problems we should build a stateless login page which does not depend on a user session. Wicket provides a special version of the Form component called StatelessForm which is stateless by default (i.e its method getStatelessHint() returns true), hence it's an ideal solution when we want to build a stateless page with a form. A possible implementation of our login form is the following (example project StatelessLoginForm):<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;html&#62;
+<p class="paragraph"/>In <a href="../guide/single.html#versioningCaching" class="guide">chapter 8</a> we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).<p class="paragraph"/>Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page.<p class="paragraph"/>For this kind of page we might encounter two potential problems if we chose to use a stateful page. The first problem occurs when the user tries to login without a valid session assigned to him. This could happen if the user leaves the login page opened for a period of time bigger than the session's timeout and then he decides to log in. Under these conditions the user will be redirected to a 'Page expired' error page, which is not exactly a nice thing for user experience.<p class="paragraph"/>The second problem occurs when a malicious user or a web crawler program attempts to login into our web application, generating a huge number of page versions and consequently increasing the size of the user session.<p class="paragraph"/>To avoid these kinds of problems we should build a stateless login page which does not depend on a user session. Wicket provides a special version of the Form component called StatelessForm which is stateless by default (i.e its method getStatelessHint() returns true), hence it's an ideal solution when we want to build a stateless page with a form. A possible implementation of our login form is the following (example project StatelessLoginForm):<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;html&#62;
    &#60;head&#62;
       &#60;meta charset=<span class="java&#45;quote">"utf&#45;8"</span> /&#62;
    &#60;/head&#62;
@@ -2180,8 +2187,9 @@
 &#125;</pre></div><p class="paragraph"/>Label sessionType shows if current session is temporary or not and is set inside onBeforeRender(): if our page is really stateless the session will be always temporary. We have also inserted a feedback panel in the home page that shows if the credentials are correct. This was done to make the example form more interactive.
 
 
+
 <h2 id="forms2_11">12.11 Working with radio buttons and checkboxes</h2>
-<p class="paragraph"/>In this paragraph we will see which components can be used to handle HTML radio buttons and checkboxes. Both these input elements are usually grouped together to display a list of possible choices:<p class="paragraph"/><img border="0" class="center" src="../img/choice-form-screenshot.png"></img><p class="paragraph"/>A check box can be used as single component to set a boolean property. For this purpose Wicket provides the <code>org.apache.wicket.markup.html.form.CheckBox</code> component which must be attached to &#60;input type="checkbox".../&#62; tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in paragraph 9.5 to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RegistrationInfo <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
+<p class="paragraph"/>In this paragraph we will see which components can be used to handle HTML radio buttons and checkboxes. Both these input elements are usually grouped together to display a list of possible choices:<p class="paragraph"/><img border="0" class="center" src="../img/choice-form-screenshot.png"></img><p class="paragraph"/>A check box can be used as single component to set a boolean property. For this purpose Wicket provides the <code>org.apache.wicket.markup.html.form.CheckBox</code> component which must be attached to &#60;input type="checkbox".../&#62; tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in <a href="../guide/single.html#modelsforms_5" class="guide">paragraph 11.5</a> to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RegistrationInfo <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> name;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> surname;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> address;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> email;
@@ -2232,7 +2240,7 @@
 		&#60;input type=<span class="java&#45;quote">"checkbox"</span>/&#62;It will be replaced by the actual checkboxes&#8230;
 &#60;/div&#62;</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre>List&#60;<span class="java&#45;object">String</span>&#62; fruits = Arrays.asList(<span class="java&#45;quote">"apple"</span>, <span class="java&#45;quote">"strawberry"</span>, <span class="java&#45;quote">"watermelon"</span>); 
 form.add(<span class="java&#45;keyword">new</span> CheckBoxMultipleChoice(<span class="java&#45;quote">"checkGroup"</span>, <span class="java&#45;keyword">new</span> ListModel&#60;<span class="java&#45;object">String</span>&#62;(<span class="java&#45;keyword">new</span>  
-								 ArrayList&#60;<span class="java&#45;object">String</span>&#62;()), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-checkbox.png"></img><p class="paragraph"/>This component can be attached to a &#60;div&#62; tag or to a &#60;span&#62; tag. No specific content is required for this tag as it will be populated with the actual checkboxes. Since this component allows multiple selection, its model object is a list. In the example above we have used model class <code>org.apache.wicket.model.util.ListModel</code> which is specifically designed to wrap a List object.<p class="paragraph"/>By default CheckBoxMultipleChoice inserts a &#60;br/&#62; tag as suffix after each option. We can configure both the suffix and the prefix used by the component with the setPrefix and setSuffix methods.<p class="paragraph"/>When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in paragraph 9.4:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;div wicket:id=<span class="java&#45;quote">"checkGroup"</span>&#62;
+								 ArrayList&#60;<span class="java&#45;object">String</span>&#62;()), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-checkbox.png"></img><p class="paragraph"/>This component can be attached to a &#60;div&#62; tag or to a &#60;span&#62; tag. No specific content is required for this tag as it will be populated with the actual checkboxes. Since this component allows multiple selection, its model object is a list. In the example above we have used model class <code>org.apache.wicket.model.util.ListModel</code> which is specifically designed to wrap a List object.<p class="paragraph"/>By default CheckBoxMultipleChoice inserts a &#60;br/&#62; tag as suffix after each option. We can configure both the suffix and the prefix used by the component with the setPrefix and setSuffix methods.<p class="paragraph"/>When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in <a href="../guide/single.html#modelsforms_5" class="guide">paragraph 11.5</a>:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;div wicket:id=<span class="java&#45;quote">"checkGroup"</span>&#62;
 		&#60;input type=<span class="java&#45;quote">"checkbox"</span>/&#62;It will be replaced by actual checkboxes&#8230;
 &#60;/div&#62;</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre>Person john = <span class="java&#45;keyword">new</span> Person(<span class="java&#45;quote">"John"</span>, <span class="java&#45;quote">"Smith"</span>);
 Person bob = <span class="java&#45;keyword">new</span> Person(<span class="java&#45;quote">"Bob"</span>, <span class="java&#45;quote">"Smith"</span>);
@@ -2250,6 +2258,7 @@
 form.add(<span class="java&#45;keyword">new</span> RadioChoice(<span class="java&#45;quote">"radioGroup"</span>, Model.of(<span class="java&#45;quote">""</span>), fruits));</pre></div><p class="paragraph"/><strong class="bold">Screenshot:</strong><p class="paragraph"/><img border="0" class="center" src="../img/grouped-radiobutton.png"></img><p class="paragraph"/>Just like CheckBoxMultipleChoice, this component provides the setPrefix and setSuffix methods to configure the prefix and suffix for our options and it supports IChoiceRender as well. In addition, RadioChoice provides the wantOnSelectionChangedNotifications() method to notify the web server when the selected option changes (this is the same method seen for DropDownChoice in paragraph 9.4).
 
 
+
 <h2 id="forms2_12">12.12 Selecting multiple values with ListMultipleChoices and Palette</h2>
 <p class="paragraph"/>Checkboxes work well when we have a small amount of options to display, but they quickly become chaotic as the number of options increases. To overcome this limit we can use the &#60;select&#62; tag switching it to multiple-choice mode with attribute multiple="multiple":<p class="paragraph"/><img border="0" class="center" src="../img/list-multiple-choices.png"></img><p class="paragraph"/>Now the user can select multiple options by holding down Ctrl key (or Command key for Mac) and selecting them.<p class="paragraph"/>To work with multiple choice list Wicket provides the <code>org.apache.wicket.markup.html.form.ListMultipleChoice</code> component:<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#60;select wicket:id=<span class="java&#45;quote">"fruits"</span>&#62;
 	&#60;option&#62;choice 1&#60;/option&#62;
@@ -2383,7 +2392,7 @@
 
 
 <h2 id="repeaters_4">13.4 Pageable repeaters</h2>
-<p class="paragraph"/>Wicket offers a number of components that should be used when we have to display a big number of  items (for example the results of a select SQL query).<p class="paragraph"/>All these components implement interface <code>org.apache.wicket.markup.html.navigation.paging.IPageable</code> and use interface <code>IDataProvider</code> (placed in package <code>org.apache.wicket.markup.repeater.data</code>) as data source. This interface is designed to support data paging. We will see an example of data paging later in paragraph 11.4.2.<p class="paragraph"/>The methods defined by IDataProvider are the following:
+<p class="paragraph"/>Wicket offers a number of components that should be used when we have to display a big number of  items (for example the results of a select SQL query).<p class="paragraph"/>All these components implement interface <code>org.apache.wicket.markup.html.navigation.paging.IPageable</code> and use interface <code>IDataProvider</code> (placed in package <code>org.apache.wicket.markup.repeater.data</code>) as data source. This interface is designed to support data paging. We will see an example of data paging later in <a href="../guide/single.html#repeaters_4" class="guide">paragraph 13.4.2</a>.<p class="paragraph"/>The methods defined by IDataProvider are the following:
 <ul class="star">
 <li>iterator(long first, long count): returns an iterator over a subset of the entire dataset. The subset starts from the item at position first and includes all the next count items (i.e. it's the closed interval first,first+count).</li>
 <li>size(): gets the size of the entire dataset.</li>
@@ -2445,11 +2454,12 @@
 
 
 <h1 id="i18n">14 Internationalization with Wicket</h1>
-In chapter 10 we have seen how the topic of localization is involved in the generation of feedback messages and we had a first contact with resource bundles. In this chapter we will continue to explore the localization support provided by Wicket and we will learn how to build pages and components ready to be localized in different languages.
+In <a href="../guide/single.html#forms2_2" class="guide">chapter 12.2</a> we have seen how the topic of localization is involved in the generation of feedback messages and we had a first contact with resource bundles. In this chapter we will continue to explore the localization support provided by Wicket and we will learn how to build pages and components ready to be localized in different languages.
 
 
+
 <h2 id="i18n_1">14.1 Localization</h2>
-<p class="paragraph"/>As we have seen in chapter 10, the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the &#60;ApplicationClassName&#62;.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.<p class="paragraph"/><blockquote class="note">
+<p class="paragraph"/>As we have seen in <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a>, the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the &#60;ApplicationClassName&#62;.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.<p class="paragraph"/><blockquote class="note">
 Providing a full description of Java support for i18n is clearly out of the scope of this document. If you need more informations about this topic you can find them in the JavaDocs and in the official <a href="http://docs.oracle.com/javase/tutorial/i18n/index.html" target="blank">i18n tutorial</a> .
 </blockquote><p class="paragraph"/><h3>Class Locale and ResourceBundle</h3><p class="paragraph"/>Class java.util.Locale represents a specific country or language of the world and is used in Java to retrieve other locale-dependent informations like numeric and date formats, the currency in use in a country and so on. Such kind of informations are accessed through special entities called resource bundles which are implemented by class <code>java.util.ResourceBundle</code>. Every resource bundle is identified by a full name which is built using four parameters: a base name (which is required), a language code, a country code and a variant (which are all optional). These three optional parameters are provided by an instance of Locale with its three corresponding getter methods: getLanguage(), getCountry() and getVariant(). Parameter language code is a lowercase ISO 639 2-letter code (like zh for Chinese, de for German and so on) while country code is an uppercase ISO 3166 2-letter code (like CN for China, DE for Germany and so on). The final full name will have the following structure (NOTE: tokens inside squared brackets are optional):<p class="paragraph"/><div class="code"><pre>&#60;base name&#62;&#91; <em class="italic">&#60;language code&#62;&#91;</em> &#60;COUNTRY_CODE&#62;&#91;_&#60;variant code&#62;&#93;&#93;&#93;</pre></div><p class="paragraph"/>For example a bundle with MyBundle as base name and localized for Mandarin Chinese (language code zh, country code CH, variant cmn) will have MyBundle_zh_CH_cmn as full name. A base name can be a fully qualified class name, meaning that it can include a package name before the actual base name. The specified package will be the container of the given bundle. For example if we use org.foo.MyBundle as base name, the bundle named MyBundle will be searched inside package org.foo. The actual base name (MyBundle in our example) will be used to build the full name of the bundle following the same rules seen above.
 <code>ResourceBundle</code> is an abstract factory class, hence it exposes a number of factory methods named  getBundle to load a concrete bundle. Without going into too much details we can say that a bundle corresponds to a file in the classpath. To find a file for a given bundle, getBundle needs first to generate an ordered list of candidate bundle names. These names are the set of all possible full names for a given bundle. For example if we have org.foo.MyBundle as base name and the current locale is the one seen before for Mandarin Chinese, the candidate names will be:
@@ -2458,9 +2468,10 @@
 <li>org.foo.MyBundle_zh_CH</li>
 <li>org.foo.MyBundle_zh</li>
 <li>org.foo.MyBundle</li>
-</ol><p class="paragraph"/>The list of these candidate names is generated starting from the most specific one and subtracting an optional parameter at each step. The last name of the list corresponds to the default resource bundle which is the most general name and is equal to the base name. Once that getBundle has generated the list of candidate names, it will iterate over them to find the first one for which is possible to load a class or a properties file. The class must be a subclass of <code>ResourceBundle</code> having as class name the full name used in the current iteration. If such a class is not found, getBundle will try to locate a properties file having a file name equals to the current full name (Java will automatically append extension .properties to the full name). For example given the resource bundle of the previous example, Java will search first for class org.foo.MyBundle_zh_CH_cmn and then for file MyBundle_zh_CH_cmn.properties inside package org.foo. If no file is found for any of the candidate names, a MissingResourceException will be thrown. Bundles contains local-dependent string resources identified by a key that is unique in the given bundle. So once we have obtained a valid bundle we can access these objects with method getString (String key).<p class="paragraph"/>As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In chapter 10 we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In paragraph 12.4 we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
+</ol><p class="paragraph"/>The list of these candidate names is generated starting from the most specific one and subtracting an optional parameter at each step. The last name of the list corresponds to the default resource bundle which is the most general name and is equal to the base name. Once that getBundle has generated the list of candidate names, it will iterate over them to find the first one for which is possible to load a class or a properties file. The class must be a subclass of <code>ResourceBundle</code> having as class name the full name used in the current iteration. If such a class is not found, getBundle will try to locate a properties file having a file name equals to the current full name (Java will automatically append extension .properties to the full name). For example given the resource bundle of the previous example, Java will search first for class org.foo.MyBundle_zh_CH_cmn and then for file MyBundle_zh_CH_cmn.properties inside package org.foo. If no file is found for any of the candidate names, a MissingResourceException will be thrown. Bundles contains local-dependent string resources identified by a key that is unique in the given bundle. So once we have obtained a valid bundle we can access these objects with method getString (String key).<p class="paragraph"/>As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a> we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a> we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
 
 
+
 <h2 id="i18n_2">14.2 Localization in Wicket</h2>
 <p class="paragraph"/>A component can get the current locale in use calling its method getLocale(). By default this method will be recursively called on component's parent containers until one of them returns a valid locale. If no one of them returns a locale, this method will get the one associated with the current user session. This locale is automatically generated by Wicket in accordance with the language settings of the browser.<p class="paragraph"/>Developers can change the locale of the current session with Session's method setLocale (Locale locale):<p class="paragraph"/><div class="code"><pre>Session.get().setLocale(locale)</pre></div><p class="paragraph"/><h3>Style and variation parameters for bundles</h3><p class="paragraph"/>In addition to locale's informations, Wicket supports two further parameters to identify a resource bundle: style and variation. Parameter style is a string value and is defined at session-level. To set/get the style for the current session we can use the corresponding setter and getter of class Session:<p class="paragraph"/><div class="code"><pre>Session.get().setStyle(<span class="java&#45;quote">"myStyle"</span>);
 Session.get().getStyle();</pre></div><p class="paragraph"/>If set, style's value contributes to the final full name of the bundle and it is placed between the base name and the locale's informations:<p class="paragraph"/><div class="code"><pre>&#60;base name&#62;&#91; <em class="italic">style&#93;&#91;</em> &#60;language code&#62;&#91; <em class="italic">&#60;COUNTRY_CODE&#62;&#91;</em> &#60;variant code&#62;&#93;&#93;&#93;</pre></div><p class="paragraph"/>Wicket gives the priority to candidate names containing the style information (if available). The other parameter we can use for localization is variation. Just like style also variation is a string value, but it is defined at component-level. The value of variation is returned by Component's method getVariation(). By default this method returns the variation of the parent component or a null value if a component hasn't a parent (i.e. it's a page). If we want to customize this parameter we must overwrite method  getVariation and make it return the desired value.<p class="paragraph"/>Variation's value contributes to the final full name of the bundle and is placed before style parameter:<p class="paragraph"/><div class="code"><pre>&#60;base name&#62;&#91; <em class="italic">variation&#93;&#91;_style&#93;&#91;</em> &#60;language code&#62;&#91; <em class="italic">&#60;COUNTRY_CODE&#62;&#91;</em> &#60;variant code&#62;&#93;&#93;&#93;</pre></div><p class="paragraph"/>
@@ -2472,12 +2483,12 @@
 &#60;!DOCTYPE properties SYSTEM <span class="xml&#45;quote">"http://www.oracle.com/webfolder/technetwork/jsc/dtd/properties.dtd"</span>&#62;
 <span class="xml&#45;tag">&#60;properties&#62;</span>
 	<span class="xml&#45;tag">&#60;entry key=<span class="xml&#45;quote">"greetingMessage"</span>&#62;</span>欢迎光临本网站！<span class="xml&#45;tag">&#60;/entry&#62;</span>
-<span class="xml&#45;tag">&#60;/properties&#62;</span></pre></div><p class="paragraph"/>To use XML bundles in Wicket we don't need to put in place any additional configuration. The only rule we have to respect with these files is to use properties.xml as extension while their base name follows the same rules seen so far for bundle names.<p class="paragraph"/><h3>Reading bundles from code</h3><p class="paragraph"/>Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in paragraph 12.4. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:<p class="paragraph"/><div class="code"><pre>getString(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/><h3>Localization of bundles in Wicket</h3><p class="paragraph"/>In chapter 10 we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:<p class="paragraph"/><div class="code"><pre>greetingMessage=Welcome to the site!</pre></div><p class="paragraph"/>Along with this file we can also find a bundle for German (WicketApplication_de.properties) and another one in XML format for simplified Chinese (WicketApplication_zh.properties.xml). The example project consists of a single page (HomePage.java) displaying the greeting message. The current locale can be changed with a drop-down list and the possible options are English (the default one), German and simplified Chinese:<p class="paragraph"/><img border="0" class="center" src="../img/locale-german.png"></img><p class="paragraph"/>The label displaying the greeting message has a custom read-only model which returns the message with method getString. The initialization code for this label is this:<p class="paragraph"/><div class="code"><pre>AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62; model = <span class="java&#45;keyword">new</span> AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62;() &#123;			
+<span class="xml&#45;tag">&#60;/properties&#62;</span></pre></div><p class="paragraph"/>To use XML bundles in Wicket we don't need to put in place any additional configuration. The only rule we have to respect with these files is to use properties.xml as extension while their base name follows the same rules seen so far for bundle names.<p class="paragraph"/><h3>Reading bundles from code</h3><p class="paragraph"/>Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a>. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:<p class="paragraph"/><div class="code"><pre>getString(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/><h3>Localization of bundles in Wicket</h3><p class="paragraph"/>In <a href="../guide/single.html#forms2_2" class="guide">paragraph 12.2</a> we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:<p class="paragraph"/><div class="code"><pre>greetingMessage=Welcome to the site!</pre></div><p class="paragraph"/>Along with this file we can also find a bundle for German (WicketApplication_de.properties) and another one in XML format for simplified Chinese (WicketApplication_zh.properties.xml). The example project consists of a single page (HomePage.java) displaying the greeting message. The current locale can be changed with a drop-down list and the possible options are English (the default one), German and simplified Chinese:<p class="paragraph"/><img border="0" class="center" src="../img/locale-german.png"></img><p class="paragraph"/>The label displaying the greeting message has a custom read-only model which returns the message with method getString. The initialization code for this label is this:<p class="paragraph"/><div class="code"><pre>AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62; model = <span class="java&#45;keyword">new</span> AbstractReadOnlyModel&#60;<span class="java&#45;object">String</span>&#62;() &#123;			
 			@Override
 			<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> getObject() &#123;
 				<span class="java&#45;keyword">return</span> getString(<span class="java&#45;quote">"greetingMessage"</span>);			
 			&#125;
-&#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"greetingMessage"</span>, model));</pre></div><p class="paragraph"/>Class <code>org.apache.wicket.model.AbstractReadOnlyModel</code> is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph 12.6.<p class="paragraph"/>The rest of the code of the home page builds the stateless form and the drop-down menu used to change the locale.<p class="paragraph"/><div class="code"><pre>List&#60;Locale&#62; locales = Arrays.asList(Locale.ENGLISH, Locale.CHINESE, Locale.GERMAN);
+&#125;;<p class="paragraph"/>add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"greetingMessage"</span>, model));</pre></div><p class="paragraph"/>Class <code>org.apache.wicket.model.AbstractReadOnlyModel</code> is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph <a href="../guide/single.html#i18n_5" class="guide">paragraph 14.5</a>.<p class="paragraph"/>The rest of the code of the home page builds the stateless form and the drop-down menu used to change the locale.<p class="paragraph"/><div class="code"><pre>List&#60;Locale&#62; locales = Arrays.asList(Locale.ENGLISH, Locale.CHINESE, Locale.GERMAN);
 <span class="java&#45;keyword">final</span> DropDownChoice&#60;Locale&#62; changeLocale = 
              <span class="java&#45;keyword">new</span> DropDownChoice&#60;Locale&#62;(<span class="java&#45;quote">"changeLocale"</span>, <span class="java&#45;keyword">new</span> Model&#60;Locale&#62;(), locales);<p class="paragraph"/>StatelessForm form = <span class="java&#45;keyword">new</span> StatelessForm(<span class="java&#45;quote">"form"</span>)&#123;
 	@Override
@@ -2498,13 +2509,13 @@
 form.add(<span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"anotherLabel"</span>,<span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"labelValue"</span>)));
 add(form);</pre></div><p class="paragraph"/>Page bundle:<p class="paragraph"/><div class="code"><pre>labelValue=Default value
 anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel
-form.anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel inside form</pre></div><p class="paragraph"/>With the code and the bundle above, the label inside the form will display the value 'Value for anotherLabel inside form'.<p class="paragraph"/><h3>Package bundles</h3><p class="paragraph"/>If no one of the previous steps can find a resource for the given key, the algorithm will look for package bundles. These bundles have <code>wicket-package</code> as base name and they can be placed in one of the package of our application:<p class="paragraph"/><img border="0" class="center" src="../img/package-bundles.png"></img><p class="paragraph"/>Packages are traversed starting from the one containing the component requesting for a resource and going up to the root package.<p class="paragraph"/><h3>Bundles for feedback messages</h3><p class="paragraph"/>The algorithm described so far applies to feedback messages as well. In case of validation errors, the component that has caused the error will be considered as the component which the string resource is relative to. Furthermore, just like application class and components, validators can have their own bundles placed next to their class and having as base name their class name. This allows us to distribute validators along with the messages they use to report errors:<p class="paragraph"/><img border="0" class="center" src="../img/validator-with-bundle.png"></img><p class="paragraph"/>Validator's resource bundles have the lowest priority in the lookup algorithm. They can be overwritten by resource bundles of components, packages and application class.<p class="paragraph"/><h3>Extending the default lookup algorithm</h3><p class="paragraph"/>Wicket implements the default lookup algorithm using the strategy pattern1. The concrete strategies are abstracted with the interface <code>org.apache.wicket.resource.loader.IStringResourceLoader</code>. By default Wicket uses the following implementations of <code>IStringResourceLoader</code> (sorted by execution order):
+form.anotherLabel.labelValue=Value <span class="java&#45;keyword">for</span> anotherLabel inside form</pre></div><p class="paragraph"/>With the code and the bundle above, the label inside the form will display the value 'Value for anotherLabel inside form'.<p class="paragraph"/><h3>Package bundles</h3><p class="paragraph"/>If no one of the previous steps can find a resource for the given key, the algorithm will look for package bundles. These bundles have <code>wicket-package</code> as base name and they can be placed in one of the package of our application:<p class="paragraph"/><img border="0" class="center" src="../img/package-bundles.png"></img><p class="paragraph"/>Packages are traversed starting from the one containing the component requesting for a resource and going up to the root package.<p class="paragraph"/><h3>Bundles for feedback messages</h3><p class="paragraph"/>The algorithm described so far applies to feedback messages as well. In case of validation errors, the component that has caused the error will be considered as the component which the string resource is relative to. Furthermore, just like application class and components, validators can have their own bundles placed next to their class and having as base name their class name. This allows us to distribute validators along with the messages they use to report errors:<p class="paragraph"/><img border="0" class="center" src="../img/validator-with-bundle.png"></img><p class="paragraph"/>Validator's resource bundles have the lowest priority in the lookup algorithm. They can be overwritten by resource bundles of components, packages and application class.<p class="paragraph"/><h3>Extending the default lookup algorithm</h3><p class="paragraph"/>Wicket implements the default lookup algorithm using the strategy pattern. The concrete strategies are abstracted with the interface <code>org.apache.wicket.resource.loader.IStringResourceLoader</code>. By default Wicket uses the following implementations of <code>IStringResourceLoader</code> (sorted by execution order):
 <ol>
 <li><strong class="bold">ComponentStringResourceLoader:</strong> implements most of the default algorithm. It searches for a given resource across bundles from the container hierarchy, from class hierarchy and from the given component.</li>
 <li><strong class="bold">PackageStringResourceLoader:</strong> searches into package bundles.</li>
 <li><strong class="bold">ClassStringResourceLoader:</strong> searches into bundles of a given class. By default the target class is the application class.</li>
 <li><strong class="bold">ValidatorStringResourceLoader:</strong> searches for resources into validator's bundles. A list of validators is provided by the form component that failed validation.</li>
-<li><strong class="bold">InitializerStringResourceLoader:</strong> this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in paragraph 15.4.</li>
+<li><strong class="bold">InitializerStringResourceLoader:</strong> this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in <a href="../guide/single.html#advanced_3" class="guide">paragraph 17.3</a>.</li>
 </ol><p class="paragraph"/>Developer can customize lookup algorithm removing default resource loaders or adding custom implementations to the list of the resource loaders in use. This task can be accomplished using method getStringResourceLoaders of setting interface <code>org.apache.wicket.settings.IResourceSettings</code>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
@@ -2537,8 +2548,8 @@
 green=Green
 red=Red
 blue=Blue
-yellow=Yellow</pre></div><p class="paragraph"/>German bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Wahlen sie eine farbe
-green=Grun
+yellow=Yellow</pre></div><p class="paragraph"/>German bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Wählen Sie eine Farbe
+green=Grün
 red=Rot
 blue=Blau
 yellow=Gelb</pre></div><p class="paragraph"/>Italian bundle:<p class="paragraph"/><div class="code"><pre>selectColor.<span class="java&#45;keyword">null</span>=Scegli un colore
@@ -2545,11 +2556,12 @@
 green=Verde
 red=Rosso
 blue=Blu
-yellow=Giallo</pre></div><p class="paragraph"/>Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Chose one ”) used for null value. The resource key for this resource is 'null' or '&#60;component id&#62;.null' if we want to make it component-specific.
+yellow=Giallo</pre></div><p class="paragraph"/>Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Select a color ”) used for null value. The resource key for this resource is 'null' or '&#60;component id&#62;.null' if we want to make it component-specific.
 
 
+
 <h2 id="i18n_5">14.5 Internationalization and Models</h2>
-<p class="paragraph"/>Internationalization is another good chance to taste the power of models. Wicket provides two built-in models to better integrate our components with string resources: they are ResourceModel and StringResourceModel.<p class="paragraph"/><h3>ResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.ResourceModel</code> acts just like the read-only model we have implemented in paragraph 12.3.4. It simply retrieves a string resource corresponding to a given key:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel <span class="java&#45;keyword">for</span> key 'greetingMessage'
+<p class="paragraph"/>Internationalization is another good chance to taste the power of models. Wicket provides two built-in models to better integrate our components with string resources: they are ResourceModel and StringResourceModel.<p class="paragraph"/><h3>ResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.ResourceModel</code> acts just like the read-only model we have implemented in <a href="../guide/single.html#i18n_3" class="guide">paragraph 14.3</a>. It simply retrieves a string resource corresponding to a given key:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel <span class="java&#45;keyword">for</span> key 'greetingMessage'
 <span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"greetingMessage"</span>);</pre></div><p class="paragraph"/>We can also specify a default value to use if the requested resource is not found:<p class="paragraph"/><div class="code"><pre>//build a ResourceModel with a <span class="java&#45;keyword">default</span> value
 <span class="java&#45;keyword">new</span> ResourceModel(<span class="java&#45;quote">"notExistingResource"</span>, <span class="java&#45;quote">"Resource not found."</span>);</pre></div><p class="paragraph"/><h3>StringResourceModel</h3><p class="paragraph"/>Model <code>org.apache.wicket.model.StringResourceModel</code> allows to work with complex and dynamic string resources containing parameters and property expressions. The basic constructor of this model takes in input a resource key and another model. This further model can be used by both the key and the related resource to specify dynamic values with property expressions. For example let's say that we are working on an e-commerce site which has a page where users can see an overview of their orders. To handle the state of user's orders we will use the following bean and enum (the code is from project StringResourceModelExample):<p class="paragraph"/>Bean:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class Order <span class="java&#45;keyword">implements</span> Serializable &#123;<p class="paragraph"/>	<span class="java&#45;keyword">private</span> Date orderDate;
 	<span class="java&#45;keyword">private</span> ORDER_STATUS status;<p class="paragraph"/>	<span class="java&#45;keyword">public</span> Order(Date orderDate, ORDER_STATUS status) &#123;
@@ -2572,6 +2584,7 @@
 StringResourceModel srm = <span class="java&#45;keyword">new</span> StringResourceModel(<span class="java&#45;quote">"orderStatus.delay"</span>, <span class="java&#45;keyword">null</span>, propertyModel, 3);</pre></div><p class="paragraph"/>Bundle:<p class="paragraph"/><div class="code"><pre>orderStatus.delay=Your order submitted on $&#123;0&#125; has been delayed by &#123;1&#125; days.</pre></div><p class="paragraph"/>One further parameter we can specify when we build a StringResourceModel is the component that must be used by the lookup algorithm. Normally this parameter is not relevant, but if we need to use a particular bundle owned by a component not considered by the algorithm, we can specify this component as second parameter. If we pass all possible parameters to StringResourceModel's constructor we obtain something like this:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">new</span> StringResourceModel(<span class="java&#45;quote">"myKey"</span>, myComponent, myModel, param1, param2, param3,...);</pre></div>
 
 
+
 <h2 id="i18n_6">14.6 Summary</h2>
 <p class="paragraph"/>Internationalization is a mandatory step if we want to take our applications (and our business!) abroad. Choosing the right strategy to manage our localized resources is fundamental to avoid to make a mess of them. In this chapter we have explored the built-in support for localization provided by Wicket, and we have learnt which solutions it offers to manage resource bundles. In the final part of the chapter we have seen how to localize the options displayed by a component (such as DropDownChoice or RadioChoice) and we also introduced two new models specifically designed to localize our components without introducing in their code any detail about internationalization.
 
@@ -2578,13 +2591,15 @@
 
 
 <h1 id="resources">15 Resource management with Wicket</h1>
-One of the biggest challenge for a web framework is to offer an efficient and consistent mechanism to handle internal resources such as CSS/JavaScript files, picture files, pdf and so on. Resources can be static (like an icon used across the site) or dynamic (they can be generated on the fly) and they can be made available to users as a download or as a simple URL.<p class="paragraph"/>In paragraph 4.6 we have already seen how to add CSS and JavaScript contents to the header section of the page. In the first half of this chapter we will learn a more sophisticated technique that allows us to manage static resources directly from code and “pack” them with our custom components.<p class="paragraph"/>Then, in the second part of the chapter we will see how to implement custom resources to enrich our web application with more complex and dynamic functionalities.
+One of the biggest challenge for a web framework is to offer an efficient and consistent mechanism to handle internal resources such as CSS/JavaScript files, picture files, pdf and so on. Resources can be static (like an icon used across the site) or dynamic (they can be generated on the fly) and they can be made available to users as a download or as a simple URL.<p class="paragraph"/>In <a href="../guide/single.html#keepControl_6" class="guide">paragraph 6.6</a> we have already seen how to add CSS and JavaScript contents to the header section of the page. In the first half of this chapter we will learn a more sophisticated technique that allows us to manage static resources directly from code and “pack” them with our custom components.<p class="paragraph"/>Then, in the second part of the chapter we will see how to implement custom resources to enrich our web application with more complex and dynamic functionalities.
 
 
+
 <h2 id="resources_1">15.1 Static vs dynamic resources</h2>
-<p class="paragraph"/>In Wicket a resource is an entity that can interact with the current request and response and It must implement interface <code>org.apache.wicket.request.resource.IResource</code>. This interface defines just method respond(IResource.Attributes attributes) where the nested class IResource. Attributes provides access to request, response and page parameters objects.<p class="paragraph"/>Resources can be static or dynamic. Static resources don't entail any computational effort to be generated and they generally correspond to a resource on the filesystem. On the contrary dynamic resources are generated on the fly when they are requested, following a specific logic coded inside them.<p class="paragraph"/>An example of dynamic resource is the built-in class CaptchaImageResource in package <code>org.apache.wicket.extensions.markup.html.captcha</code> which generates a captcha image each time is rendered.<p class="paragraph"/>As we will see in paragraph 13.6, developers can build custom resources extending base class <code>org.apache.wicket.request.resource.AbstractResource</code>.
+<p class="paragraph"/>In Wicket a resource is an entity that can interact with the current request and response and It must implement interface <code>org.apache.wicket.request.resource.IResource</code>. This interface defines just method respond(IResource.Attributes attributes) where the nested class IResource. Attributes provides access to request, response and page parameters objects.<p class="paragraph"/>Resources can be static or dynamic. Static resources don't entail any computational effort to be generated and they generally correspond to a resource on the filesystem. On the contrary dynamic resources are generated on the fly when they are requested, following a specific logic coded inside them.<p class="paragraph"/>An example of dynamic resource is the built-in class CaptchaImageResource in package <code>org.apache.wicket.extensions.markup.html.captcha</code> which generates a captcha image each time is rendered.<p class="paragraph"/>As we will see in <a href="../guide/single.html#resources_10" class="guide">paragraph 15.10</a>, developers can build custom resources extending base class <code>org.apache.wicket.request.resource.AbstractResource</code>.
 
 
+
 <h2 id="resources_2">15.2 Resource references</h2>
 <p class="paragraph"/>Most of the times in Wicket we won't directly instantiate a resource but rather we will use a reference to it. Resource references are represented by abstract class <code>org.apache.wicket.request.resource.ResourceReference</code> which returns a concrete resource with factory method getResource(). In this way we can lazy-initialize resources loading them only the first time they are requested.
 
@@ -2605,7 +2620,7 @@
 	            <span class="java&#45;keyword">new</span> PackageResourceReference(getClass(), <span class="java&#45;quote">"calendar.jpg"</span>);
 		add(<span class="java&#45;keyword">new</span> Image(<span class="java&#45;quote">"packageResPicture"</span>, resourceReference));
 	&#125;
-&#125;</pre></div><p class="paragraph"/>Wicket will take care of generating a valid URL for file calendar.jpg. URLs for package resources have the following structure:<p class="paragraph"/><code>&#60;path to application root&#62;/wicket/resource/&#60;fully qualified classname&#62;/&#60;resource file name&#62;-&#60;ver-&#60;id&#62;&#62;(.file extension)</code><p class="paragraph"/>In our example the URL for our picture file calendar.jpg is the following:<p class="paragraph"/><code>./wicket/resource/org.wicketTutorial.CustomPanel/calendar-ver-1297887542000.jpg</code><p class="paragraph"/>The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in paragraph 8.6.4.<p class="paragraph"/>The fourth segment is the fully qualified name of the class used to locate the resource and it is the scope of the package resource. In the last segment of the URL we can find the name of the resource (the file name).<p class="paragraph"/>As you can see Wicket has automatically appended to the file name a version identifier (ver-1297887542000). When Wicket runs in DEVELOPMENT mode this identifier contains the timestamp in millisecond indicating the last time the resource file was modified. This can be useful when we are developing our application and resource files are frequently modified. Appending the timestamp to the original name we are sure that our browser will use always the last version of the file and not an old, out of date, cached version.<p class="paragraph"/>When instead Wicket is running in DEPLOYMENT mode, the version identifier will contain the MD5 digest of the file instead of the timestamp. The digest is computed only the first time the resource is requested. This perfectly makes sense as static resources don't change so often when our application runs into production environment and when this appends the application is redeployed.<p class="paragraph"/><blockquote class="note">
+&#125;</pre></div><p class="paragraph"/>Wicket will take care of generating a valid URL for file calendar.jpg. URLs for package resources have the following structure:<p class="paragraph"/><code>&#60;path to application root&#62;/wicket/resource/&#60;fully qualified classname&#62;/&#60;resource file name&#62;-&#60;ver-&#60;id&#62;&#62;(.file extension)</code><p class="paragraph"/>In our example the URL for our picture file calendar.jpg is the following:<p class="paragraph"/><code>./wicket/resource/org.wicketTutorial.CustomPanel/calendar-ver-1297887542000.jpg</code><p class="paragraph"/>The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6.4</a>.<p class="paragraph"/>The fourth segment is the fully qualified name of the class used to locate the resource and it is the scope of the package resource. In the last segment of the URL we can find the name of the resource (the file name).<p class="paragraph"/>As you can see Wicket has automatically appended to the file name a version identifier (ver-1297887542000). When Wicket runs in DEVELOPMENT mode this identifier contains the timestamp in millisecond indicating the last time the resource file was modified. This can be useful when we are developing our application and resource files are frequently modified. Appending the timestamp to the original name we are sure that our browser will use always the last version of the file and not an old, out of date, cached version.<p class="paragraph"/>When instead Wicket is running in DEPLOYMENT mode, the version identifier will contain the MD5 digest of the file instead of the timestamp. The digest is computed only the first time the resource is requested. This perfectly makes sense as static resources don't change so often when our application runs into production environment and when this appends the application is redeployed.<p class="paragraph"/><blockquote class="note">
 Package resources can be localized following the same rules seen for resource bundles and markup files:<p class="paragraph"/><img border="0" class="center" src="../img/package-resource-localization.png"></img><p class="paragraph"/>In the example illustrated in the picture above, if we try to retrieve package resource calendar.jpg when the current locale is set to French, the actual file returned will be calendar_fr.jpg.
 </blockquote><p class="paragraph"/><h3>Responsive images - multiple resource references use in one component</h3><p class="paragraph"/>Since Wicket 7.0.0 the build-in component <code>org.apache.wicket.markup.html.image.Image</code> allows you to add several ResourceReferences via varargs and to provide sizes for each image so that the browser is able to pick the best image source.<p class="paragraph"/><strong class="bold">HTML:</strong>
 <div class="code"><pre>&#8230;
@@ -2641,7 +2656,7 @@
 ...</pre></div><p class="paragraph"/><strong class="bold">Java Code:</strong>
 <div class="code"><pre>&#8230;
     Video video = <span class="java&#45;keyword">new</span> Video(<span class="java&#45;quote">"video"</span>, <span class="java&#45;keyword">new</span> PackageResourceReference(getClass(),<span class="java&#45;quote">"video.mp4"</span>));
-...</pre></div><p class="paragraph"/><h3>Using package resources with tag &#60;wicket:link&#62;</h3><p class="paragraph"/>In paragraph 8.3 we have used tag &#60;wicket:link&#62; to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:<p class="paragraph"/><div class="code"><pre>&#60;wicket:link&#62;
+...</pre></div><p class="paragraph"/><h3>Using package resources with tag &#60;wicket:link&#62;</h3><p class="paragraph"/>In <a href="../guide/single.html#urls_3" class="guide">paragraph 10.3</a> we have used tag &#60;wicket:link&#62; to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:<p class="paragraph"/><div class="code"><pre>&#60;wicket:link&#62;
    &#60;img src=<span class="java&#45;quote">"icon.png"</span>/&#62;
 &#60;/wicket:link&#62;</pre></div><p class="paragraph"/>In the example above Wicket will populate the attribute src with the URL corresponding to the package resource icon.png. &#60;wicket:link&#62; supports also tag &#60;link&#62; for CSS files and tag &#60;script&#62; for JavaScript files.
 
@@ -2648,7 +2663,7 @@
 
 
 <h2 id="resources_4">15.4 Adding resources to page header section</h2>
-<p class="paragraph"/>Wicket comes with interface <code>org.apache.wicket.markup.html.IHeaderContributor</code> which allows components and behaviors (which will be introduced later in paragraph 15.1) to contribute to the header section of their page. The only method defined in this interface is <code>renderHead(IHeaderResponse response)</code> where <code>IHeaderResponse</code> is an interface which defines method <code>render(HeaderItem item)</code> to write static resources or free-form text into the header section of the page.<p class="paragraph"/>Header entries are instances of abstract class <code>org.apache.wicket.markup.head.HeaderItem</code>. Wicket provides a set of built-in implementations of this class suited for the most common types of resources. With the exception of <code>PriorityHeaderItem</code>, every implementation of <code>HeaderItem</code> is an abstract factory class:
+<p class="paragraph"/>Wicket comes with interface <code>org.apache.wicket.markup.html.IHeaderContributor</code> which allows components and behaviors (which will be introduced later in <a href="../guide/single.html#advanced_1" class="guide">paragraph 17.1</a>) to contribute to the header section of their page. The only method defined in this interface is <code>renderHead(IHeaderResponse response)</code> where <code>IHeaderResponse</code> is an interface which defines method <code>render(HeaderItem item)</code> to write static resources or free-form text into the header section of the page.<p class="paragraph"/>Header entries are instances of abstract class <code>org.apache.wicket.markup.head.HeaderItem</code>. Wicket provides a set of built-in implementations of this class suited for the most common types of resources. With the exception of <code>PriorityHeaderItem</code>, every implementation of <code>HeaderItem</code> is an abstract factory class:
 <ul class="star">
 <li><strong class="bold">CssHeaderItem:</strong> represents a CSS resource. Factory methods provided by this class are <code>forReference</code> which takes in input a resource reference, <code>forUrl</code> which creates an CSS item from a given URL and <code>forCSS</code> which takes in input an arbitrary CSS string and an optional id value to identify the resource.</li>
 <li><strong class="bold">JavaScriptHeaderItem:</strong> represents a JavaScript resource. Just like <code>CssHeaderItem</code> it provides factory methods <code>forReference</code> and <code>forUrl</code> along with method <code>forScript</code> which takes in input an arbitrary string representing the script and an optional id value to identify the resource. Method <code>forReference</code> also supports boolean parameter <code>defer</code> which renders the namesake attribute in the script tag (<code>defer</code> attribute indicates that our script must be execute only after the page has loaded).</li>
@@ -2757,7 +2772,7 @@
 
 
 <h2 id="resources_10">15.10 Custom resources</h2>
-<p class="paragraph"/>In Wicket the best way to add dynamic functionalities to our application (such as csv export, a pdf generated on the fly, etc...) is implementing a custom resource. In this paragraph as example of custom resource we will build a basic RSS feeds generator which can be used to publish feeds on our site (project CustomResourceMounting). Instead of generating a RSS feed by hand we will use Rome framework and its utility classes.<p class="paragraph"/>As hinted above in paragraph 13.1, class <code>AbstractResource</code> can be used as base class to implement new resources. This class defines abstract method <code>newResourceResponse</code> which is invoked when the resource is requested. The following is the code of our RSS feeds generator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RSSProducerResource <span class="java&#45;keyword">extends</span> AbstractResource &#123;<p class="paragraph"/>  @Override
+<p class="paragraph"/>In Wicket the best way to add dynamic functionalities to our application (such as csv export, a pdf generated on the fly, etc...) is implementing a custom resource. In this paragraph as example of custom resource we will build a basic RSS feeds generator which can be used to publish feeds on our site (project CustomResourceMounting). Instead of generating a RSS feed by hand we will use Rome framework and its utility classes.<p class="paragraph"/>As hinted above in <a href="../guide/single.html#resources_1" class="guide">paragraph 15.1</a>, class <code>AbstractResource</code> can be used as base class to implement new resources. This class defines abstract method <code>newResourceResponse</code> which is invoked when the resource is requested. The following is the code of our RSS feeds generator:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RSSProducerResource <span class="java&#45;keyword">extends</span> AbstractResource &#123;<p class="paragraph"/>  @Override
   <span class="java&#45;keyword">protected</span> ResourceResponse newResourceResponse(Attributes attributes) &#123;
     ResourceResponse resourceResponse = <span class="java&#45;keyword">new</span> ResourceResponse();
     resourceResponse.setContentType(<span class="java&#45;quote">"text/xml"</span>);
@@ -2781,8 +2796,9 @@
 &#125;</pre></div><p class="paragraph"/>Method <code>newResourceResponse</code> returns an instance of <code>ResourceResponse</code> representing the response generated by the custom resource. Since RSS feeds are based on XML, in the code above we have set the type of the response to text/xml and the text encoding to utf-8.<p class="paragraph"/>To specify the content that will be returned by our resource we must also provide an implementation of inner class <code>WriteCallback</code> which is responsible for writing content data to response's output stream. In our project we used class SyndFeedOutput from Rome framework to write our feed to response. Method <code>getFeed()</code> is just an utility method that generates a sample RSS feed (which is an instance of interface <code>com.sun.syndication.feed.synd.SyndFeed</code>).<p class="paragraph"/>Now that we have our custom resource in place, we can use it in the home page of the project. The easiest way to make a resource available to users is to expose it with link component <code>ResourceLink</code>:<p class="paragraph"/><div class="code"><pre>add(<span class="java&#45;keyword">new</span> ResourceLink(<span class="java&#45;quote">"rssLink"</span>, <span class="java&#45;keyword">new</span> RSSProducerResource()));</pre></div><p class="paragraph"/>In the next paragraphs we will see how to register a resource at application-level and how to mount it to an arbitrary URL.
 
 
+
 <h2 id="resources_11">15.11 Mounting resources</h2>
-<p class="paragraph"/>Just like pages also resources can be mounted to a specific path. Class <code>WebApplication</code> provides method <code>mountResource</code> which is almost identical to <code>mountPage</code> seen in paragraph 8.6.1:<p class="paragraph"/><div class="code"><pre>@Override
+<p class="paragraph"/>Just like pages also resources can be mounted to a specific path. Class <code>WebApplication</code> provides method <code>mountResource</code> which is almost identical to <code>mountPage</code> seen in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6.1</a>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init() &#123;
   <span class="java&#45;keyword">super</span>.init();
   //resource mounted to path /foo/bar
@@ -2807,6 +2823,7 @@
 &#125;</pre></div>
 
 
+
 <h2 id="resources_12">15.12 Shared resources</h2>
 <p class="paragraph"/>Resources can be added to a global registry in order to share them at application-level. Shared resources are identified by an application-scoped key and they can be easily retrieved at a later time using reference class <code>SharedResourceReference</code>. The global registry can be accessed with <code>Application</code>'s method <code>getSharedResources</code>. In the following excerpt of code (taken again from project <code>CustomResourceMounting</code>) we register an instance of our custom RSS feeds producer as application-shared resource:<p class="paragraph"/><div class="code"><pre>//init application's method
   @Override
@@ -2939,7 +2956,7 @@
 &#125;<p class="paragraph"/>@Override
 <span class="java&#45;keyword">public</span> &#60;Date&#62; IConverter&#60;Date&#62; getConverter(<span class="java&#45;object">Class</span>&#60;Date&#62; type) &#123;
 	<span class="java&#45;keyword">return</span> (IConverter&#60;Date&#62;) dateConverter;
-&#125;</pre></div><p class="paragraph"/>The first thing to do inside onInitialize is to ensure that our component will have a markup id for its related text field. This is done invoking setOutputMarkupId(true).<p class="paragraph"/>Next, JQueryDateField tries to retrieve the date format and the ISO language code that must be used as initialization parameters. This is done using class <code>ResourceModel</code> which searches for a given resource in the available bundles. If no value is found for date format or for ISO language code, default values will be used ('mm/dd/yy' and 'en-GB').<p class="paragraph"/>To generate the relative URL for calendar icon, we load it as package resource reference and then we use <code>Component</code>'s method urlFor to get the URL value (we have seen this method in paragraph 7.3.2).<p class="paragraph"/>The last configuration instruction executed inside onInitialize is the instantiation of the custom converter used by our component. This converter is an instance of the built-in class <code>org.apache.wicket.datetime.PatternDateConvert</code> and must use the previously retrieved date format to perform conversion operations. Now to tell our component to use this converter we must return it overriding <code>FormComponent</code>'s method <code>getConverter</code>.<p class="paragraph"/><h3>Header contributor code</h3><p class="paragraph"/>The rest of the code of our custom component is inside method <code>renderHeader</code>, which is responsible for adding to page header the bundled JQuery library, the three files from JQuery UI distribution, the custom file JQDatePicker.js and the invocation of function <code>initJQDatepicker</code>:<p class="paragraph"/><div class="code"><pre>@Override
+&#125;</pre></div><p class="paragraph"/>The first thing to do inside onInitialize is to ensure that our component will have a markup id for its related text field. This is done invoking setOutputMarkupId(true).<p class="paragraph"/>Next, JQueryDateField tries to retrieve the date format and the ISO language code that must be used as initialization parameters. This is done using class <code>ResourceModel</code> which searches for a given resource in the available bundles. If no value is found for date format or for ISO language code, default values will be used ('mm/dd/yy' and 'en-GB').<p class="paragraph"/>To generate the relative URL for calendar icon, we load it as package resource reference and then we use <code>Component</code>'s method urlFor to get the URL value (we have seen this method in <a href="../guide/single.html#requestProcessing_3" class="guide">paragraph 9.3.2</a>).<p class="paragraph"/>The last configuration instruction executed inside onInitialize is the instantiation of the custom converter used by our component. This converter is an instance of the built-in class <code>org.apache.wicket.datetime.PatternDateConvert</code> and must use the previously retrieved date format to perform conversion operations. Now to tell our component to use this converter we must return it overriding <code>FormComponent</code>'s method <code>getConverter</code>.<p class="paragraph"/><h3>Header contributor code</h3><p class="paragraph"/>The rest of the code of our custom component is inside method <code>renderHeader</code>, which is responsible for adding to page header the bundled JQuery library, the three files from JQuery UI distribution, the custom file JQDatePicker.js and the invocation of function <code>initJQDatepicker</code>:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void renderHead(IHeaderResponse response) &#123;
 	<span class="java&#45;keyword">super</span>.renderHead(response);<p class="paragraph"/>	//<span class="java&#45;keyword">if</span> component is disabled we don't have to load the JQueryUI datepicker
 	<span class="java&#45;keyword">if</span>(!isEnabledInHierarchy())
@@ -2965,10 +2982,11 @@
 &#125;</pre></div><p class="paragraph"/>If component is disabled the calendar icon must be hidden and no datepicker must be displayed. That's why <code>renderHeader</code> is skipped if component is not enabled.<p class="paragraph"/>To get a reference to the bundled JQuery library we used the JavaScript setting interface <code>IJavaScriptLibrarySettings</code> and its method <code>getJQueryReference</code>.<p class="paragraph"/>In the last part of <code>renderHeader</code> we build the string to invoke function <code>initJQDatepicker</code> using the values obtained inside onInitialize. Unfortunately the date format used by JQuery UI is different from the one adopted in Java so we have to convert it before building the JavaScript code. This init script is rendered into header section using a <code>OnLoadHeaderItem</code> to ensure that it will be executed after all the other scripts have been loaded.<p class="paragraph"/><blockquote class="note">
 If we add more than one instance of our custom component to a single page, static resources are rendered to the header section just once. Wicket automatically checks if a static resource is already referenced by a page and if so, it will not render it again.<p class="paragraph"/>This does not apply to the init script which is dynamically generated and is rendered for every instance of the component.
 </blockquote><p class="paragraph"/><blockquote class="warning">
-Our datepicker is not ready yet to be used with AJAX. In chapter 16 we will see how to modify it to make it AJAX-compatible.
+Our datepicker is not ready yet to be used with AJAX. In <a href="../guide/single.html#ajax" class="guide">chapter 18</a> we will see how to modify it to make it AJAX-compatible.
 </blockquote>
 
 
+
 <h2 id="jsintegration_3">16.3 Summary</h2>
 <p class="paragraph"/>In this brief chapter we have seen how custom components can be integrated with <a href="http://en.wikipedia.org/wiki/Dynamic_HTML" target="blank">DHTML</a> technologies. To do so we have used most of what we have learnt in this guide. Now we are able to build complex components with a rich user experience. However this is not enough yet to develop <a href="http://en.wikipedia.org/wiki/Web_2.0" target="blank">Web 2.0</a> applications. We still have to cover a fundamental technology like AJAX and some other Wicket-related topics that will help us building our application in more modular and efficient way.<p class="paragraph"/><p class="paragraph"/>
 
@@ -2995,7 +3013,7 @@
 </ul><p class="paragraph"/>For example the following behavior prepends a red asterisk to the tag of a form component if this one  is required:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class RedAsteriskBehavior <span class="java&#45;keyword">extends</span> Behavior &#123;<p class="paragraph"/>  @Override
   <span class="java&#45;keyword">public</span> void beforeRender(Component component) &#123;
       Response response = component.getResponse();
-      <span class="java&#45;object">StringBuffer</span> asterisktHtml = <span class="java&#45;keyword">new</span> <span class="java&#45;object">StringBuffer</span>(200);<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(componet <span class="java&#45;keyword">instanceof</span> FormComponent 
+      <span class="java&#45;object">StringBuffer</span> asterisktHtml = <span class="java&#45;keyword">new</span> <span class="java&#45;object">StringBuffer</span>(200);<p class="paragraph"/>      <span class="java&#45;keyword">if</span>(component <span class="java&#45;keyword">instanceof</span> FormComponent 
             &#38;&#38; ((FormComponent)component).isRequired())&#123;
         asteriskHtml.append(<span class="java&#45;quote">" &#60;b style=&#34;color:red;font&#45;size:medium&#34;&#62;&#42;&#60;/b&#62;"</span>);
       &#125;  
@@ -3153,7 +3171,7 @@
 	    label.setDefaultModelObject(<span class="java&#45;quote">"Another value 4 label."</span>);
 	    target.add(label);
 	&#125;  	
-&#125;;</pre></div><p class="paragraph"/>Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to <code>AjaxRequestTarget</code>. This can be done using one of the two methods seen in paragraph 4.3:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> Label label = <span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"labelComponent"</span>, <span class="java&#45;quote">"Initial value."</span>);
+&#125;;</pre></div><p class="paragraph"/>Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to <code>AjaxRequestTarget</code>. This can be done using one of the two methods seen in <a href="../guide/single.html#keepControl_3" class="guide">paragraph 6.3</a>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> Label label = <span class="java&#45;keyword">new</span> Label(<span class="java&#45;quote">"labelComponent"</span>, <span class="java&#45;quote">"Initial value."</span>);
 //autogenerate a markup id
 label.setOutputMarkupId(<span class="java&#45;keyword">true</span>);
 add(label);
@@ -3175,8 +3193,9 @@
 </blockquote>
 
 
+
 <h2 id="ajax_2">18.2 Build-in AJAX components</h2>
-<p class="paragraph"/>Wicket distribution comes with a number of built-in AJAX components ready to be used. Some of them are the ajaxified version of common components like links and buttons, while others are AJAX-specific components.<p class="paragraph"/>AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of appending “Ajax” to the component class name.<p class="paragraph"/>This paragraph provides an overview of what we can find in Wicket to start writing AJAX-enhanced web applications.<p class="paragraph"/><h3>Links and buttons</h3><p class="paragraph"/>In the previous paragraph we have already introduced component AjaxLink. Wicket provides also the ajaxified versions of submitting components SubmitLink and Button which are simply called AjaxSubmitLink and AjaxButton. These components come with a version of methods onSubmit, onError and onAfterSubmit that takes in input also an instance of <code>AjaxRequestTarget</code>.<p class="paragraph"/>Both components are in package <code>org.apache.wicket.ajax.markup.html.form</code>.<p class="paragraph"/><h3>Fallback components</h3><p class="paragraph"/>Building an entire site using AJAX can be risky as some clients may not support this technology. In order to provide an usable version of our site also to these clients, we can use components <code>AjaxFallbackLink</code> and <code>AjaxFallbackButton</code> which are able to automatically degrade to a standard link or to a standard button if client doesn't support AJAX.<p class="paragraph"/><h3>AJAX Checkbox</h3><p class="paragraph"/>Class <code>org.apache.wicket.ajax.markup.html.form.AjaxCheckBox</code> is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is <code>onUpdate(AjaxRequestTarget target)</code>. The component extends standard checkbox component <code>CheckBox</code> adding an <code>AjaxFormComponentUpdatingBehavior</code> to itself (we will see this behavior later in paragraph 16.3.3).<p class="paragraph"/><h3>AJAX editable labels</h3><p class="paragraph"/>An editable label is a special label that can be edited by the user when she/he clicks on it. Wicket ships three different implementations for this component (all inside package <code>org.apache.wicket.extensions.ajax.markup.html</code>):
+<p class="paragraph"/>Wicket distribution comes with a number of built-in AJAX components ready to be used. Some of them are the ajaxified version of common components like links and buttons, while others are AJAX-specific components.<p class="paragraph"/>AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of prepending “Ajax” to the component class name.<p class="paragraph"/>This paragraph provides an overview of what we can find in Wicket to start writing AJAX-enhanced web applications.<p class="paragraph"/><h3>Links and buttons</h3><p class="paragraph"/>In the previous paragraph we have already introduced component AjaxLink. Wicket provides also the ajaxified versions of submitting components SubmitLink and Button which are simply called AjaxSubmitLink and AjaxButton. These components come with a version of methods onSubmit, onError and onAfterSubmit that takes in input also an instance of <code>AjaxRequestTarget</code>.<p class="paragraph"/>Both components are in package <code>org.apache.wicket.ajax.markup.html.form</code>.<p class="paragraph"/><h3>Fallback components</h3><p class="paragraph"/>Building an entire site using AJAX can be risky as some clients may not support this technology. In order to provide an usable version of our site also to these clients, we can use components <code>AjaxFallbackLink</code> and <code>AjaxFallbackButton</code> which are able to automatically degrade to a standard link or to a standard button if client doesn't support AJAX.<p class="paragraph"/><h3>AJAX Checkbox</h3><p class="paragraph"/>Class <code>org.apache.wicket.ajax.markup.html.form.AjaxCheckBox</code> is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is <code>onUpdate(AjaxRequestTarget target)</code>. The component extends standard checkbox component <code>CheckBox</code> adding an <code>AjaxFormComponentUpdatingBehavior</code> to itself (we will see this behavior later in <a href="../guide/single.html#ajax_3" class="guide">paragraph 18.3.3</a>).<p class="paragraph"/><h3>AJAX editable labels</h3><p class="paragraph"/>An editable label is a special label that can be edited by the user when she/he clicks on it. Wicket ships three different implementations for this component (all inside package <code>org.apache.wicket.extensions.ajax.markup.html</code>):
 <ul class="star">
 <li><strong class="bold">AjaxEditableLabel</strong>: it's a basic version of editable label. User can edit the content of the label with a text field. This is also the base class for the other two editable labels.</li>
 <li><strong class="bold">AjaxEditableMultiLineLabel</strong>: this label supports multi-line values and uses a text area as editor component.</li>
@@ -3398,7 +3417,7 @@
 
 <h2 id="ajax_5">18.5 AJAX request attributes and call listeners</h2>
 <p class="paragraph"/>Starting from version 6.0 Wicket has introduced two entities which allow us to control how an AJAX request is generated on client side and to specify the custom JavaScript code we want to execute during request handling. These entities are class <code>AjaxRequestAttributes</code> and interface <code>IAjaxCallListener</code>, both placed in package <code>org.apache.wicket.ajax.attributes</code>.<p class="paragraph"/>AjaxRequestAttributes exposes the attributes used to generate the JavaScript call invoked on client side to start an AJAX request. Each attribute will be passed as a <a href="http://en.wikipedia.org/wiki/JSON" target="blank">JSON</a> parameter to the JavaScript function <code>Wicket.Ajax.ajax</code> which is responsible for sending the concrete AJAX request. Every JSON parameter is identified by a short name. Here is a partial list of the available parameters:<p class="paragraph"/><table class="wiki-table" cellpadding="0" cellspacing="0" border="0"><tr><th><strong class="bold">Short name</strong></th><th><strong class="bold">Description</strong></th><th><strong class="bold">Default value</strong></th></tr><tr class="table-odd"><td>u</td><td>The callback URL used to serve the AJAX request that will be sent.</td><td>&#160;</td></tr><tr class="table-even"><td>c</td><td>The id of the component that wants to start the AJAX call.</td><td>&#160;</td></tr><tr class="table-odd"><td>e</td><td>A list of event (click, change, etc...) that can trigger the AJAX call.</td><td>domready</td></tr><tr class="table-even"><td>m</td><td>The request method that must be used (GET or POST).</td><td>GET</td></tr><tr class="table-odd"><td>f</td><td>The id of the form that must be submitted with the AJAX call.</td><td>&#160;</td></tr><tr class="table-even"><td>mp</td><td>If the AJAX call involves the submission of a form, this flag indicates whether the data must be encoded using the encoding mode “multipart/form-data”.</td><td>false</td></tr><tr class="table-odd"><td>sc</td><td>The input name of the submitting component of the form</td><td>&#160;</td></tr><tr class="table-even"><td>async</td><td>A boolean parameter that indicates if the AJAX call is asynchronous (true) or not.</td><td>true</td></tr><tr class="table-odd"><td>wr</td><td>Specifies the type of data returned by the AJAX call (XML, HTML, JSON, etc...).</td><td>XML</td></tr><tr class="table-even"><td>bh, pre, bsh, ah, sh, fh, coh</td><td>This is a list of the listeners that are executed on client side (they are JavaScript scripts) during the lifecycle of an AJAX request. Each short name is the abbreviation of one of the methods defined in the interface IAjaxCallListener (see below).</td><td>An empty list</td></tr></table><p class="paragraph"/><blockquote class="note">
-A full list of the available request parameters as well as more details on the related JavaScript code can be found at <a href="https://cwiki.apache.org/confluence/" target="blank">https://cwiki.apache.org/confluence/ display/WICKET/Wicket+Ajax</a> display/WICKET/Wicket+Ajax .
+A full list of the available request parameters as well as more details on the related JavaScript code can be found at <a href="https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax" target="blank">https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax</a> .
 </blockquote><p class="paragraph"/>Parameters 'u' (callback URL) and 'c' (the id of the component) are generated by the AJAX behavior that will serve the AJAX call and they are not accessible through <code>AjaxRequestAttributes</code>.<p class="paragraph"/>Here is the final AJAX function generate for the behavior used in example project <code>AjaxEventBehavior</code> Example:<p class="paragraph"/><div class="code"><pre>Wicket.Ajax.ajax(&#123;<span class="java&#45;quote">"u"</span>:<span class="java&#45;quote">"./?0&#45;1.IBehaviorListener.0&#45;clickCounterLabel"</span>, <span class="java&#45;quote">"e"</span>:<span class="java&#45;quote">"click"</span>,               
                   <span class="java&#45;quote">"c"</span>:<span class="java&#45;quote">"clickCounterLabel1"</span>&#125;);</pre></div><p class="paragraph"/>Even if most of the times we will let Wicket generate request attributes for us, both AJAX components and behaviors give us the chance to modify them overriding their method <code>updateAjaxAttributes (AjaxRequestAttributes attributes)</code>.<p class="paragraph"/>One of the attribute we may need to modify is the list of <code>IAjaxCallListeners</code> returned by method <code>getAjaxCallListeners()</code>.<p class="paragraph"/><code>IAjaxCallListener</code> defines a set of methods which return the JavaScript code (as a <code>CharSequence</code>) that must be executed on client side when the AJAX request handling reaches a given stage:
 <ul class="star">
@@ -3493,7 +3512,7 @@
 <li>'/ajax/call/complete': called when the AJAX call has completed.</li>
 <li>'/dom/node/removing': called when a component is about to be removed via AJAX. This  happens when component markup is updated via AJAX (i.e. the component itself or one of its containers has been added to <code>AjaxRequestTarget</code>)</li>
 <li>'/dom/node/added': called when a component has been added via AJAX. Just like '/dom/node/removing', this event is triggered when a component is added to <code>AjaxRequestTarget</code>.</li>
-</ul><p class="paragraph"/>The callback function takes in input the following parameters:  attrs, jqXHR, textStatus, jqEvent and errorThrown. The first three parameters are the same seen before with <code>IAjaxCallListener</code> while jqEvent is an event internally fired by Wicket. The last parameter errorThrown indicates if an error has occurred during the AJAX call.<p class="paragraph"/>To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in chapter 14. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
+</ul><p class="paragraph"/>The callback function takes in input the following parameters:  attrs, jqXHR, textStatus, jqEvent and errorThrown. The first three parameters are the same seen before with <code>IAjaxCallListener</code> while jqEvent is an event internally fired by Wicket. The last parameter errorThrown indicates if an error has occurred during the AJAX call.<p class="paragraph"/>To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in <a href="../guide/single.html#jsintegration" class="guide">chapter 16</a>. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
 <ul class="star">
 <li>After been refreshed, the component loses every JavaScript handler set on it. This is not a problem for our datepicker as it sets a new JQuery datepicker every time is rendered (inside method renderHead).</li>
 <li>The markup previously created with JavaScript is not removed. For our datepicker this means that the icon used to open the calendar won't be removed while a new one will be added each time the component is refreshed.</li>
@@ -3564,10 +3583,12 @@
 
 <h2 id="jee_3">19.3 JSR-330 annotations</h2>
 <p class="paragraph"/>Spring (and Guice) users can use standard <a href="http://jcp.org/en/jsr/detail?id=330" target="blank">JSR-330</a> annotations to wire their dependencies. This will make their code more interoperable with other containers that support this standard:<p class="paragraph"/><div class="code"><pre>//inject a bean specifying its name with JSR&#45;330 annotations
-  <code>Inject </code>Named(<span class="java&#45;quote">"anotherName"</span>)
+  @Inject 
+  @Named(<span class="java&#45;quote">"anotherName"</span>)
   <span class="java&#45;keyword">private</span> EnterpriseMessage enterpriseMessage;</pre></div>
 
 
+
 <h2 id="jee_4">19.4 Summary</h2>
 <p class="paragraph"/>In this chapter we have seen how to integrate Wicket applications with Spring and with an EJB container. Module wicket-examples contains also an example of integration with Guice (see application class <code>org.apache.wicket.examples.guice.GuiceApplication</code>).<p class="paragraph"/>
 
@@ -3817,7 +3838,7 @@
   &#123;		                
     //Authentication code&#8230;
   &#125;
-&#125;;</pre></div><p class="paragraph"/>By default <code>SimplePageAuthorizationStrategy</code> checks for permissions only on pages. If we want to change this behavior and check also other kinds of components, we must override method <code>isActionAuthorized</code> and implement our custom logic inside it.<p class="paragraph"/><h3>Role-based strategies</h3><p class="paragraph"/>At the end of paragraph 20.1 we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.<p class="paragraph"/>In Wicket roles are simple strings like “BASIC_USER” or “ADMIN” (they don't need to be capitalized) and they are handled with class <code>org.apache.wicket.authroles.authorization.strategies.role.Roles</code>. This class extends standard HashSet collection adding some functionalities to check whether the set contains one or more roles. Class <code>Roles</code> already defines roles Roles.USER and Roles.ADMIN.<p class="paragraph"/>The session class in the following example returns a custom “SIGNED_IN” role for every authenticated user and it adds an Roles.ADMIN role if username is equal to superuser:<p class="paragraph"/><div class="code"><pre>class BasicAuthenticationRolesSession <span class="java&#45;keyword">extends</span> AuthenticatedWebSession &#123;
+&#125;;</pre></div><p class="paragraph"/>By default <code>SimplePageAuthorizationStrategy</code> checks for permissions only on pages. If we want to change this behavior and check also other kinds of components, we must override method <code>isActionAuthorized</code> and implement our custom logic inside it.<p class="paragraph"/><h3>Role-based strategies</h3><p class="paragraph"/>At the end of <a href="../guide/single.html#security_1" class="guide">paragraph 21.1</a> we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.<p class="paragraph"/>In Wicket roles are simple strings like “BASIC_USER” or “ADMIN” (they don't need to be capitalized) and they are handled with class <code>org.apache.wicket.authroles.authorization.strategies.role.Roles</code>. This class extends standard HashSet collection adding some functionalities to check whether the set contains one or more roles. Class <code>Roles</code> already defines roles Roles.USER and Roles.ADMIN.<p class="paragraph"/>The session class in the following example returns a custom “SIGNED_IN” role for every authenticated user and it adds an Roles.ADMIN role if username is equal to superuser:<p class="paragraph"/><div class="code"><pre>class BasicAuthenticationRolesSession <span class="java&#45;keyword">extends</span> AuthenticatedWebSession &#123;
 	<span class="java&#45;keyword">private</span> <span class="java&#45;object">String</span> userName;<p class="paragraph"/>	<span class="java&#45;keyword">public</span> BasicAuthenticationRolesSession(Request request) &#123;
 		<span class="java&#45;keyword">super</span>(request);		
 	&#125;<p class="paragraph"/>	@Override
@@ -3831,7 +3852,7 @@
 			resultRoles.add(Roles.ADMIN);<p class="paragraph"/>		<span class="java&#45;keyword">return</span> resultRoles;
 	&#125;
 &#125;</pre></div><p class="paragraph"/>Roles can be adopted to apply security restrictions on our pages and components. This can be done  using one of the two built-in authorization strategies that extend super class <code>AbstractRoleAuthorizationStrategyWicket</code>: <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code><p class="paragraph"/>The difference between these two strategies is that <code>MetaDataRoleAuthorizationStrategy</code> handles role-based authorizations with Wicket metadata while <code>AnnotationsRoleAuthorizationStrategy</code> uses Java annotations.<p class="paragraph"/><blockquote class="note">
-Application class <code>AuthenticatedWebApplication</code> already sets <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code> as its own authorization strategies (it uses a compound strategy as we will see in paragraph 20.2).<p class="paragraph"/>The code that we will see in the next examples is for illustrative purpose only. If our application class inherits from <code>AuthenticatedWebApplication</code> we won't need to configure anything to use these two strategies.
+Application class <code>AuthenticatedWebApplication</code> already sets <code>MetaDataRoleAuthorizationStrategy</code> and <code>AnnotationsRoleAuthorizationStrategy</code> as its own authorization strategies (it uses a compound strategy as we will see in <a href="../guide/single.html#security_2" class="guide">paragraph 21.2</a>).<p class="paragraph"/>The code that we will see in the next examples is for illustrative purpose only. If our application class inherits from <code>AuthenticatedWebApplication</code> we won't need to configure anything to use these two strategies.
 </blockquote><p class="paragraph"/><h4>Using roles with metadata</h4><p class="paragraph"/>Strategy <code>MetaDataRoleAuthorizationStrategy</code> uses application and components metadata to implement role-based authorizations. The class defines a set of static methods authorize that can be used to specify which roles are allowed to instantiate a component and which roles can perform a given action on a component.<p class="paragraph"/>The following code snippet reports both application and session classes from project <code>MetaDataRolesStrategyExample</code> and illustrates how to use <code>MetaDataRoleAuthorizationStrategy</code> to allow access to a given page (AdminOnlyPage) only to ADMIN role:<p class="paragraph"/><strong class="bold">Application class:</strong><p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class WicketApplication <span class="java&#45;keyword">extends</span> AuthenticatedWebApplication&#123;    		
    @Override
    <span class="java&#45;keyword">public</span> <span class="java&#45;object">Class</span>&#60;? <span class="java&#45;keyword">extends</span> WebPage&#62; getHomePage()&#123;
@@ -3872,7 +3893,7 @@
    <span class="java&#45;keyword">public</span> void init()&#123;   
       getApplicationSettings().setAccessDeniedPage(
 			MyCustomAccessDeniedPage.class); 
-   &#125;</pre></div><p class="paragraph"/>Just like custom “Page expired” page (see chapter 6.2.5), also custom “Access denied” page must be bookmarkable.<p class="paragraph"/><h4>Using roles with annotations</h4><p class="paragraph"/>Strategy <code>AnnotationsRoleAuthorizationStrategy</code> relies on two built-in annotations to handle role-based authorizations. These annotations are <code>AuthorizeInstantiation</code> and <code>AuthorizeAction</code>. As their names suggest the first annotation specifies which roles are allowed to instantiate the annotated component while the second must be used to indicate which roles are allowed to perform a specific action on the annotated component.<p class="paragraph"/>In the following example we use annotations to make a page accessible only to signed-in users and to enable it only if user has the ADMIN role:<p class="paragraph"/><div class="code"><pre>@AuthorizeInstantiation(<span class="java&#45;quote">"SIGNED_IN"</span>)
+   &#125;</pre></div><p class="paragraph"/>Just like custom “Page expired” page (see <a href="../guide/single.html#versioningCaching_2" class="guide">chapter 8.2.5</a>), also custom “Access denied” page must be bookmarkable.<p class="paragraph"/><h4>Using roles with annotations</h4><p class="paragraph"/>Strategy <code>AnnotationsRoleAuthorizationStrategy</code> relies on two built-in annotations to handle role-based authorizations. These annotations are <code>AuthorizeInstantiation</code> and <code>AuthorizeAction</code>. As their names suggest the first annotation specifies which roles are allowed to instantiate the annotated component while the second must be used to indicate which roles are allowed to perform a specific action on the annotated component.<p class="paragraph"/>In the following example we use annotations to make a page accessible only to signed-in users and to enable it only if user has the ADMIN role:<p class="paragraph"/><div class="code"><pre>@AuthorizeInstantiation(<span class="java&#45;quote">"SIGNED_IN"</span>)
 @AuthorizeAction(action = <span class="java&#45;quote">"ENABLE"</span>, roles = &#123;<span class="java&#45;quote">"ADMIN"</span>&#125;)
 <span class="java&#45;keyword">public</span> class MyPage <span class="java&#45;keyword">extends</span> WebPage &#123;
    //Page class code&#8230;
@@ -3895,7 +3916,7 @@
 
 
 <h2 id="security_3">21.3 Using HTTPS protocol</h2>
-<p class="paragraph"/>HTTPS is the standard technology adopted on Internet to create a secure communication channel between web applications and their users.<p class="paragraph"/>In Wicket we can easily protect our pages with HTTPS mounting a special request mapper called <code>HttpsMapper</code> and using annotation RequireHttps with those pages we want to serve over this protocol. Both these two entities are in package <code>org.apache.wicket.protocol.https</code>.<p class="paragraph"/>HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation <code>RequireHttps</code>. Most of the times the wrapped mapper will be the root one, just like we saw before for <code>CryptoMapper</code> in paragraph 10.6.<p class="paragraph"/>Another parameter needed to build a <code>HttpsMapper</code> is an instance of class <code>HttpsConfi</code>g. This class allows us to specify which ports must be used for HTTPS and HTTP. By default the port numbers used by these two protocols are respectively 443 and 80.<p class="paragraph"/>The following code is taken from project <code>HttpsProtocolExample</code> and illustrates how to enable HTTPS  in our applications:<p class="paragraph"/><div class="code"><pre>//Application class code&#8230;
+<p class="paragraph"/>HTTPS is the standard technology adopted on Internet to create a secure communication channel between web applications and their users.<p class="paragraph"/>In Wicket we can easily protect our pages with HTTPS mounting a special request mapper called <code>HttpsMapper</code> and using annotation RequireHttps with those pages we want to serve over this protocol. Both these two entities are in package <code>org.apache.wicket.protocol.https</code>.<p class="paragraph"/>HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation <code>RequireHttps</code>. Most of the times the wrapped mapper will be the root one, just like we saw before for <code>CryptoMapper</code> in <a href="../guide/single.html#urls_6" class="guide">paragraph 10.6</a>.<p class="paragraph"/>Another parameter needed to build a <code>HttpsMapper</code> is an instance of class <code>HttpsConfi</code>g. This class allows us to specify which ports must be used for HTTPS and HTTP. By default the port numbers used by these two protocols are respectively 443 and 80.<p class="paragraph"/>The following code is taken from project <code>HttpsProtocolExample</code> and illustrates how to enable HTTPS  in our applications:<p class="paragraph"/><div class="code"><pre>//Application class code&#8230;
 @Override
 <span class="java&#45;keyword">public</span> void init()&#123;   
    setRootRequestMapper(<span class="java&#45;keyword">new</span> HttpsMapper(getRootRequestMapper(), 
@@ -4101,7 +4122,7 @@
 //&#8230;
 //execute AJAX behavior, i.e. onUpdate will be invoked 
 tester.executeBehavior(ajaxBehavior));	
-//...</pre></div><p class="paragraph"/><h3>Using a custom servlet context</h3><p class="paragraph"/>In paragraph 13.9 we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project <code>CustomFolder4MarkupExample</code>).<p class="paragraph"/>In order to write testing code for applications that use this kind of customization, we must tell <code>WicketTester</code> which folder to use as webapp root. This is necessary as under test environment we don't have any web server, hence it's impossible for <code>WicketTester</code> to retrieve this parameter from servlet context.<p class="paragraph"/>Webapp root folder can be passed to <code>WicketTester</code>'s constructor as further parameter like we did in the test case of project <code>CustomFolder4MarkupExample</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class TestHomePage&#123;
+//...</pre></div><p class="paragraph"/><h3>Using a custom servlet context</h3><p class="paragraph"/>In <a href="../guide/single.html#resources_13" class="guide">paragraph 15.13</a> we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project <code>CustomFolder4MarkupExample</code>).<p class="paragraph"/>In order to write testing code for applications that use this kind of customization, we must tell <code>WicketTester</code> which folder to use as webapp root. This is necessary as under test environment we don't have any web server, hence it's impossible for <code>WicketTester</code> to retrieve this parameter from servlet context.<p class="paragraph"/>Webapp root folder can be passed to <code>WicketTester</code>'s constructor as further parameter like we did in the test case of project <code>CustomFolder4MarkupExample</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class TestHomePage&#123;
    <span class="java&#45;keyword">private</span> WicketTester tester;<p class="paragraph"/>   @Before
    <span class="java&#45;keyword">public</span> void setUp()&#123;
       //build the path to webapp root folder   
@@ -4632,7 +4653,8 @@
    data : <span class="java&#45;object">byte</span>&#91;&#93;
 &#125;</pre></div><p class="paragraph"/>i.e. this is the serialized page instance (data) plus additional information needed to be able to easily find it later (sessionId, pageId).<p class="paragraph"/>When a <code>SerializedPage</code> has to be stored <code>DefaultPageStore</code> stores it in a application scoped cache ({sessionId, pageId} -&#62; SerializedPage) and additionally gives it to the underlying <code>IDataStore#storeData(sessionId, pageId, data)</code>. The application scoped cache is used as second level cache. Getting a page from it is slower than the http session based cache in <code>PageStoreManager</code> because the page has to be deserialized, but is faster than the underlying <code>IDataStore</code> which stores the page bytes in some persistent store.<p class="paragraph"/>The size of the application scoped cache is configurable via <code>org.apache.wicket.settings.IStoreSettings.setInmemoryCacheSize(int)</code>.<p class="paragraph"/><h3>IDataStore</h3><p class="paragraph"/><code>org.apache.wicket.pageStore.IDataStore</code> is used to persist Wicket pages (as bytes) to a persistent store like e.g. files or databases. The default implementation is <code>org.apache.wicket.pageStore.DiskDataStore</code> which as its name says stores the pages in files. The location of the folder where the files are stored is configurable via <code>org.apache.wicket.settings.IStoreSettings.setFileStoreFolder(File)</code>, by default the web container's work folder is used (ServletContext attribute 'javax.servlet.context.tempdir'). In this folder a sub-folder is created named <code>'applicationName-filestore'</code>. 
 This folder contains a sub-folder for each active http session. This session folder contains a single file named 'data' which contains the bytes for the pages. The size of this 'data' file is configurable via <code>org.apache.wicket.settings.IStoreSettings.setMaxSizePerSession(Bytes)</code>. When this size is exceeded the newly stored files overwrite the oldest ones.<p class="paragraph"/><h3>AsynchronousDataStore</h3><p class="paragraph"/>By default Wicket wraps <code>DiskDataStore</code> with <code>org.apache.wicket.pageStore.AsynchronousDataStore</code>. The role of <code>AsynchronousDataStore</code> is to detach the http worker thread from waiting for the write of the page bytes to the disk.
-To disable it use: <code>org.apache.wicket.settings.IStoreSettings.setAsynchronous(false)</code>. AsynchronousDataStore can delay the storage of pages' bytes for at most <code>org.apache.wicket.settings.IStoreSettings.setAsynchronousQueueCapacity(int)</code> pages. If this capacity is exceeded then the page's bytes are written synchronously to the backing <code>IDataStore</code>.<p class="paragraph"/><h3>DebugDiskDataStore</h3><p class="paragraph"/>Wicket provides an extension of <code>DiskDataStore</code> that can be used to browse the content of the 'data' files created by <code>DiskDataStore</code>. This debug enabled <code>DiskDataStore</code> is automatically setup when wicket-devutils.jar is in the classpath.
+To disable it use: <code>org.apache.wicket.settings.IStoreSettings.setAsynchronous(false)</code>. AsynchronousDataStore can delay the storage of pages' bytes for at most <code>org.apache.wicket.settings.IStoreSettings.setAsynchronousQueueCapacity(int)</code> pages. If this capacity is exceeded then the page's bytes are written synchronously to the backing <code>IDataStore</code>.<p class="paragraph"/><h3>DebugDiskDataStore</h3><p class="paragraph"/>Wicket provides an extension of <code>DiskDataStore</code> that can be used to browse the content of the 'data' files created by <code>DiskDataStore</code>. This extension can be found in wicket-devutils.jar and needs to be enabled in the <code>init</code>-method of your application via 
+<div class="code"><pre>DebugDiskDataStore.register(<span class="java&#45;keyword">this</span>);</pre></div>
 The debug information can be seen at http://host:port/context/wicket/internal/debug/diskDataStore<p class="paragraph"/><h3>HttpSessionDataStore</h3><p class="paragraph"/>In some environments like Google AppEngine it is not allowed to write to the file system and thus <code>DiskDataStore</code> cannot be used. In this case <code>org.apache.wicket.pageStore.memory.HttpSessionDataStore</code> can be used as replacement. This implementation of <code>IDataStore</code> is not persistent and puts all the data in the http session.
 Wicket comes with 2 default eviction strategies to keep the size of the http session reasonable:
 <ul class="star">
@@ -4648,9 +4670,12 @@
            <span class="java&#45;keyword">return</span>  <span class="java&#45;keyword">new</span> HttpSessionDataStore(pageManagerContext, <span class="java&#45;keyword">new</span> PageNumberEvictionStrategy(20));
        &#125;
    &#125;
-&#125;</pre></div><p class="paragraph"/>
+&#125;</pre></div><p class="paragraph"/><h3>DebugBar</h3><p class="paragraph"/>Further insights which can be valueable during debugging can be retrieved using the <code>org.apache.wicket.devutils.debugbar.DebugBar</code> from wicket-devutils.jar. It's a panel which you simply add:<p class="paragraph"/>Java: 
+<div class="code"><pre>add(<span class="java&#45;keyword">new</span> DebugBar(<span class="java&#45;quote">"debug"</span>));</pre></div><p class="paragraph"/>HTML:
+<div class="code"><pre>&#60;span wicket:id=<span class="java&#45;quote">"debug"</span>/&#62;</pre></div>
 
 
+
 <h1 id="maven">26 Working with Maven (Appendix)</h1>
 
 
@@ -4657,12 +4682,12 @@
 
 
 <h2 id="maven_1">26.1 Switching Wicket to DEPLOYMENT mode</h2>
-<p class="paragraph"/>As pointed out in the note at page 9, Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:<p class="paragraph"/><div class="code"><pre>&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;
+<p class="paragraph"/>As pointed out in the note in <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2</a>, Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:<p class="paragraph"/><div class="code"><pre>&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;
 &#42;&#42;&#42; WARNING: Wicket is running in DEVELOPMENT mode.              &#42;&#42;&#42;
 &#42;&#42;&#42;                               ^^^^^^^^^^^                    &#42;&#42;&#42;
 &#42;&#42;&#42; Do NOT deploy to your live server(s) without changing <span class="java&#45;keyword">this</span>.  &#42;&#42;&#42;
 &#42;&#42;&#42; See Application&#35;getConfigurationType() <span class="java&#45;keyword">for</span> more information. &#42;&#42;&#42;
-&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;</pre></div><p class="paragraph"/>As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in three different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:<p class="paragraph"/><div class="code"><pre>&#60;filter&#62;      
+&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;&#42;</pre></div><p class="paragraph"/>As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in four different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:<p class="paragraph"/><div class="code"><pre>&#60;filter&#62;      
 	&#60;filter&#45;name&#62;wicket.MyApp&#60;/filter&#45;name&#62;
 	&#60;filter&#45;class&#62;org.apache.wicket.protocol.http.WicketFilter&#60;/filter&#45;class&#62;
 	&#60;init&#45;param&#62;
@@ -4676,15 +4701,16 @@
 &#60;/filter&#62;</pre></div><p class="paragraph"/>The additional parameter is written in bold. The same parameter can be also expressed as context parameter:<p class="paragraph"/><div class="code"><pre>&#60;context&#45;param&#62;
     &#60;param&#45;name&#62;configuration&#60;/param&#45;name&#62;
     &#60;param&#45;value&#62;deployment&#60;/param&#45;value&#62;
-&#60;/context&#45;param&#62;</pre></div><p class="paragraph"/>The third way to set the running mode is using system property wicket.configuration. This parameter can be specified in the command line that starts up the server:<p class="paragraph"/><div class="code"><pre>java &#45;Dwicket.configuration=deployment ...</pre></div><p class="paragraph"/>Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
+&#60;/context&#45;param&#62;</pre></div><p class="paragraph"/>The third way to set the running mode is using system property wicket.configuration. This parameter can be specified in the command line that starts up the server:<p class="paragraph"/><div class="code"><pre>java &#45;Dwicket.configuration=deployment ...</pre></div><p class="paragraph"/>The last option is to set it in your Java code (e.g. in the init-method of your WebApplication):<p class="paragraph"/><div class="code"><pre>setConfigurationType(RuntimeConfigurationType.DEPLOYMENT);</pre></div><p class="paragraph"/>Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
 
 
+
 <h2 id="maven_2">26.2 Creating a Wicket project from scratch and importing it into our favourite IDE</h2>
 <p class="paragraph"/><blockquote class="note">
 In order to follow the instructions of this paragraph you must have Maven installed on your system. The installation of Maven is out of the scope of this guide but you can easily find an extensive documentation about it on Internet.
 Another requirement is a good Internet connection (a flat ADSL is enough) because Maven needs to connect to its central repository to download the required dependencies. 
 </blockquote><p class="paragraph"/>
-<h3>From Maven to our IDE</h3><p class="paragraph"/>Wicket project and its dependencies are managed using Maven1. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
+<h3>From Maven to our IDE</h3><p class="paragraph"/>Wicket project and its dependencies are managed using Maven. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
 The main step to create such a project is to run the command which generates project's structure and its artifacts. If we are not familiar with Maven or we simply don't want to type this command by hand, we can use the utility form on Wicket site at <a href="http://wicket.apache.org/start/quickstart.html" target="blank">http://wicket.apache.org/start/quickstart.html</a> :<p class="paragraph"/><img border="0" class="center" src="../img/quickstart-webpage.png"></img><p class="paragraph"/>Here we have to specify the root package of our project (GroupId), the project name (ArtifactId) and which version of Wicket we want to use (Version).
 Once we have run the resulting command in the OS shell, we will have a new folder with the same name of the project (i.e the ArtifactId). Inside this folder we can find a file called pom.xml. This is the main file used by Maven to manage our project. For example, using “org.wicketTutorial” as GroupId and “MyProject” as ArtifactId, we would obtain the following artifacts:<p class="paragraph"/><div class="code"><pre>.&#77;yProject
         |   pom.xml
@@ -4739,7 +4765,7 @@
 </blockquote><p class="paragraph"/><blockquote class="note">
 If we modify the pom.xml file (for example adding further dependencies) we must regenerate project's artifacts and refresh the project (F5 key) to reflect changes into Eclipse.
 </blockquote><p class="paragraph"/><h3>Speeding up development with plugins.</h3><p class="paragraph"/>Now that we have our project loaded into our IDE we could start coding our components directly by hand. However it would be a shame to not leverage the free and good Wicket plugins available for our IDE. The following is a brief overview of the most widely used plugins for each of the three main IDEs considered so far.<p class="paragraph"/><strong class="bold">NetBeans</strong>
-NetBeans offers Wicket support thought 'NetBeans Plugin for Wicket' hosted at <a href="http://java.net/projects/nbwicketsupport/" target="blank">http://java.net/projects/nbwicketsupport/</a> . This plugin is released under CDDL-1.0 license. 
+NetBeans offers Wicket support through 'NetBeans Plugin for Wicket' hosted at <a href="http://plugins.netbeans.org/plugin/3586/wicket-1-4-support" target="blank">http://plugins.netbeans.org/plugin/3586/wicket-1-4-support</a> . This plugin is released under CDDL-1.0 license. 
 You can  find a nice introduction guide to this plugin at <a href="http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html" target="blank">http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html</a> .<p class="paragraph"/><strong class="bold">Intellj IDEA</strong>
 For JetBrain IDEA we can use WicketForge plugin, hosted at Google Code <a href="http://code.google.com/p/wicketforge/" target="blank">http://code.google.com/p/wicketforge/</a> . The plugin is released under ASF 2.0 license.<p class="paragraph"/><strong class="bold">Eclipse</strong>
 With Eclipse we can install one of the plugins that supports Wicket. As of the writing of this document, the most popular is probably Qwickie, available in the Eclipse Marketplace and hosted on Google Code at <a href="http://code.google.com/p/qwickie/" target="blank">http://code.google.com/p/qwickie/</a> .
@@ -4746,6 +4772,7 @@
 QWickie is released under ASF 2.0 license.
 
 
+
 <h1 id="wicketstuff">27 Project WicketStuff (Appendix)</h1>
 
 
@@ -4820,7 +4847,7 @@
 
 
 <h2 id="wicketstuff_5">27.5 Module wicketstuff-inmethod-grid</h2>
-<p class="paragraph"/>Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid.<p class="paragraph"/>Just like pageable repeaters (seen in paragraph 11.4) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid1.png"></img><p class="paragraph"/>DataGrid supports also editable cells and row selection:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid2.png"></img><p class="paragraph"/>The following snippet illustrate how to use DataGrid and is taken from wiki page <a href="https://github.com/wicketstuff/core/wiki/InMethodGrid" target="blank">https://github.com/wicketstuff/core/wiki/InMethodGrid</a> :<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#8230;
+<p class="paragraph"/>Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid.<p class="paragraph"/>Just like pageable repeaters (seen in <a href="../guide/single.html#repeaters_4" class="guide">paragraph 13.4</a>) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid1.png"></img><p class="paragraph"/>DataGrid supports also editable cells and row selection:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid2.png"></img><p class="paragraph"/>The following snippet illustrate how to use DataGrid and is taken from wiki page <a href="https://github.com/wicketstuff/core/wiki/InMethodGrid" target="blank">https://github.com/wicketstuff/core/wiki/InMethodGrid</a> :<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#8230;
   &#60;div wicket:id=<span class="java&#45;quote">"grid"</span>&#62;Grid&#60;/div&#62;
 ...</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> List&#60;Person&#62; personList = //load a list of Persons
 <span class="java&#45;keyword">final</span> ListDataProvider listDataProvider = <span class="java&#45;keyword">new</span> ListDataProvider(personList);
@@ -4915,7 +4942,7 @@
 <li>To preview your changes you should have <a href="http://grails.org/" target="blank">Grails</a> installed.</li>
 <ul class="star">
 <li>Download it from <a href="http://grails.org/download" target="blank">here</a>.</li>
-</ul></ul><p class="paragraph"/><strong class="bold">Note</strong>: Download version <strong class="bold">2.2.4</strong>. Newer versions are not supported at the moment.
+</ul></ul><p class="paragraph"/><strong class="bold">Note</strong>: Download version <strong class="bold">2.2.4</strong>. Newer versions are not supported at the moment. Grails 2.2.4 does <strong class="bold">not</strong> work with Java 8. Use Java 7 instead.
 <ul class="star">
 <ul class="star">
 <li>Install it by following these <a href="http://grails.org/doc/latest/guide/gettingStarted.html#requirements" target="blank">instructions</a></li>
@@ -4928,6 +4955,7 @@
 </ul><p class="paragraph"/><div class="code"><pre>svn diff &#62; my.patch</pre></div>
 and attach it to a ticket in Apache Wicket's <a href="https://issues.apache.org/jira/browse/WICKET" target="blank">JIRA</a><p class="paragraph"/><strong class="bold">Thank you!</strong>
 
+
                     </div>
                 </td>
                 <td id="col2">
@@ -4947,7 +4975,7 @@
         <div id="footer">
             
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
             
         </div>
Index: guide/src/docs/guide/advanced/advanced_1.gdoc
===================================================================
--- guide/src/docs/guide/advanced/advanced_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/advanced/advanced_1.gdoc	(working copy)
@@ -29,7 +29,7 @@
       Response response = component.getResponse();
       StringBuffer asterisktHtml = new StringBuffer(200);
       
-      if(componet instanceof FormComponent 
+      if(component instanceof FormComponent 
             && ((FormComponent)component).isRequired()){
         asteriskHtml.append(" <b style=\"color:red;font-size:medium\">*</b>");
       }  
Index: guide/src/docs/guide/ajax/ajax_1.gdoc
===================================================================
--- guide/src/docs/guide/ajax/ajax_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/ajax/ajax_1.gdoc	(working copy)
@@ -28,7 +28,7 @@
 };
 {code}
 
-Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to @AjaxRequestTarget@. This can be done using one of the two methods seen in paragraph 4.3:
+Components can be refreshed via Ajax only if they have rendered a markup id for their related tag. As a consequence, we must remember to set a valid id value on every component we want to add to @AjaxRequestTarget@. This can be done using one of the two methods seen in [paragraph 6.3|guide:keepControl_3]:
 
 {code}
 final Label label = new Label("labelComponent", "Initial value.");
@@ -61,4 +61,4 @@
 Repeaters component that have @org.apache.wicket.markup.repeater.AbstractRepeater@ as base class (like @ListView@, @RepeatingView@, etc...) can not be directly updated via AJAX.
 
 If we want to refresh their markup via AJAX we must add one of their parent containers to the @AjaxRequestTarget@.
-{warning}
\ No newline at end of file
+{warning}
Index: guide/src/docs/guide/ajax/ajax_2.gdoc
===================================================================
--- guide/src/docs/guide/ajax/ajax_2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/ajax/ajax_2.gdoc	(working copy)
@@ -2,7 +2,7 @@
 
 Wicket distribution comes with a number of built-in AJAX components ready to be used. Some of them are the ajaxified version of common components like links and buttons, while others are AJAX-specific components. 
 
-AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of appending “Ajax” to the component class name.
+AJAX components are not different from any other component seen so far and they don't require any additional configuration to be used. As we will shortly see, switching from a classic link or button to the ajaxified version is just a matter of prepending “Ajax” to the component class name.
 
 This paragraph provides an overview of what we can find in Wicket to start writing AJAX-enhanced web applications.
 
@@ -18,7 +18,7 @@
 
 h3. AJAX Checkbox
 
-Class @org.apache.wicket.ajax.markup.html.form.AjaxCheckBox@ is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is @onUpdate(AjaxRequestTarget target)@. The component extends standard checkbox component @CheckBox@ adding an @AjaxFormComponentUpdatingBehavior@ to itself (we will see this behavior later in paragraph 16.3.3).
+Class @org.apache.wicket.ajax.markup.html.form.AjaxCheckBox@ is a checkbox component that updates its model via AJAX when user changes its value. Its AJAX callback method is @onUpdate(AjaxRequestTarget target)@. The component extends standard checkbox component @CheckBox@ adding an @AjaxFormComponentUpdatingBehavior@ to itself (we will see this behavior later in [paragraph 18.3.3|guide:ajax_3]).
 
 h3. AJAX editable labels
 
Index: guide/src/docs/guide/ajax/ajax_5.gdoc
===================================================================
--- guide/src/docs/guide/ajax/ajax_5.gdoc	(revision 1675105)
+++ guide/src/docs/guide/ajax/ajax_5.gdoc	(working copy)
@@ -19,7 +19,7 @@
 {table}
 
 {note}
-A full list of the available request parameters as well as more details on the related JavaScript code can be found at "https://cwiki.apache.org/confluence/ display/WICKET/Wicket+Ajax":https://cwiki.apache.org/confluence/ display/WICKET/Wicket+Ajax .
+A full list of the available request parameters as well as more details on the related JavaScript code can be found at "https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax":https://cwiki.apache.org/confluence/display/WICKET/Wicket+Ajax .
 {note}
 
 Parameters 'u' (callback URL) and 'c' (the id of the component) are generated by the AJAX behavior that will serve the AJAX call and they are not accessible through @AjaxRequestAttributes@.
Index: guide/src/docs/guide/ajax/ajax_6.gdoc
===================================================================
--- guide/src/docs/guide/ajax/ajax_6.gdoc	(revision 1675105)
+++ guide/src/docs/guide/ajax/ajax_6.gdoc	(working copy)
@@ -152,7 +152,7 @@
 
 The callback function takes in input the following parameters:  attrs, jqXHR, textStatus, jqEvent and errorThrown. The first three parameters are the same seen before with @IAjaxCallListener@ while jqEvent is an event internally fired by Wicket. The last parameter errorThrown indicates if an error has occurred during the AJAX call. 
 
-To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in chapter 14. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
+To see a basic example of use of a global AJAX call listener, let's go back to our custom datepicker created in [chapter 16|guide:jsintegration]. When we built it we didn't think about a possible use of the component with AJAX.  When a complex component like our datepicker is refreshed via AJAX, the following two side effects can occur: 
 
 * After been refreshed, the component loses every JavaScript handler set on it. This is not a problem for our datepicker as it sets a new JQuery datepicker every time is rendered (inside method renderHead).
 * The markup previously created with JavaScript is not removed. For our datepicker this means that the icon used to open the calendar won't be removed while a new one will be added each time the component is refreshed.
Index: guide/src/docs/guide/contributing.gdoc
===================================================================
--- guide/src/docs/guide/contributing.gdoc	(revision 1675105)
+++ guide/src/docs/guide/contributing.gdoc	(working copy)
@@ -11,7 +11,7 @@
 
 * To preview your changes you should have [Grails|http://grails.org/] installed.
 ** Download it from [here|http://grails.org/download]. 
-*Note*: Download version *2.2.4*. Newer versions are not supported at the moment.
+*Note*: Download version *2.2.4*. Newer versions are not supported at the moment. Grails 2.2.4 does *not* work with Java 8. Use Java 7 instead.
 ** Install it by following these [instructions|http://grails.org/doc/latest/guide/gettingStarted.html#requirements]
 
 * Navigate to __site/guide/guide_ folder and execute
@@ -27,4 +27,4 @@
 {code}
 and attach it to a ticket in Apache Wicket's [JIRA|https://issues.apache.org/jira/browse/WICKET]
 
-*Thank you!*
\ No newline at end of file
+*Thank you!*
Index: guide/src/docs/guide/forms2/forms2_1.gdoc
===================================================================
--- guide/src/docs/guide/forms2/forms2_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/forms2/forms2_1.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-In paragraph 9.3 we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
+In [paragraph 11.3|guide:modelsforms_3] we have seen a very basic usage of the Form component and we didn't pay much attention to what happens behind the scenes of form submission. In Wicket when we submit a form we trigger the following steps on server side:
 
 # Form validation: user input is checked to see if it satisfies the validation rules set on the form. If validation fails, step number 2 is skipped and the form should display a feedback message to explain to user what went wrong. During this step input values (which are simple strings sent with a web request) are converted into Java objects. In the next paragraphs we will explore the infrastructures provided by Wicket for the three sub-tasks involved with form validation, which are: conversion of user input into objects, validation of user input, and visualization of feedback messages.
 # Updating of models: if validation succeeds, the form updates the model of its children components with the converted values obtained in the previous step.
@@ -12,4 +12,4 @@
 
 Without going into too much detail, we can say that the first two steps of form processing correspond to the invocation of one or more Form's internal methods (which are declared protected and final). Some examples of these methods are validate(), which is invoked during validation step, and updateFormComponentModels(), which is used at the step that updates the form field models.
 
-The whole form processing is started invoking public method process(IFormSubmitter) (Later in paragraph 10.4 we will introduce interface IFormSubmitter). 
\ No newline at end of file
+The whole form processing is started invoking public method process(IFormSubmitter) (Later in [paragraph 12.5|guide:forms2_5] we will introduce interface IFormSubmitter). 
Index: guide/src/docs/guide/forms2/forms2_10.gdoc
===================================================================
--- guide/src/docs/guide/forms2/forms2_10.gdoc	(revision 1675105)
+++ guide/src/docs/guide/forms2/forms2_10.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-In chapter 6 we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).
+In [chapter 8|guide:versioningCaching] we have seen how Wicket pages can be divided into two categories: stateful and stateless. Pages that are stateless don't need to be stored in the user session and they should be used  when we don't need to save any user data in the user session (for example in the public area of a site).
 
 Besides saving resources on server-side, stateless pages can be adopted to improve user experience and to avoid security weaknesses. A typical situation where a stateless page can bring these benefits is when we have to implement a login page. 
 
@@ -75,4 +75,4 @@
 }
 {code}
 
-Label sessionType shows if current session is temporary or not and is set inside onBeforeRender(): if our page is really stateless the session will be always temporary. We have also inserted a feedback panel in the home page that shows if the credentials are correct. This was done to make the example form more interactive.
\ No newline at end of file
+Label sessionType shows if current session is temporary or not and is set inside onBeforeRender(): if our page is really stateless the session will be always temporary. We have also inserted a feedback panel in the home page that shows if the credentials are correct. This was done to make the example form more interactive.
Index: guide/src/docs/guide/forms2/forms2_11.gdoc
===================================================================
--- guide/src/docs/guide/forms2/forms2_11.gdoc	(revision 1675105)
+++ guide/src/docs/guide/forms2/forms2_11.gdoc	(working copy)
@@ -4,7 +4,7 @@
 
 !choice-form-screenshot.png!
 
-A check box can be used as single component to set a boolean property. For this purpose Wicket provides the @org.apache.wicket.markup.html.form.CheckBox@ component which must be attached to <input type="checkbox".../> tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in paragraph 9.5 to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:
+A check box can be used as single component to set a boolean property. For this purpose Wicket provides the @org.apache.wicket.markup.html.form.CheckBox@ component which must be attached to <input type="checkbox".../> tag. In the next example (project SingleCheckBox) we will consider a form similar to the one used in [paragraph 11.5|guide:modelsforms_5] to edit a Person object, but with an additional checkbox to let the user decide if she wants to subscribe to our mailing list or not. The form uses the following bean as backing object:
 
 {code}
 public class RegistrationInfo implements Serializable {
@@ -113,7 +113,7 @@
 
 By default CheckBoxMultipleChoice inserts a <br/> tag as suffix after each option. We can configure both the suffix and the prefix used by the component with the setPrefix and setSuffix methods.
 
-When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in paragraph 9.4:
+When our options are more complex objects than simple strings, we can render them using an IChoiceRender, as we did for DropDownChoice in [paragraph 11.5|guide:modelsforms_5]:
 
 *HTML:*
 
@@ -184,4 +184,4 @@
 
 !grouped-radiobutton.png!
 
-Just like CheckBoxMultipleChoice, this component provides the setPrefix and setSuffix methods to configure the prefix and suffix for our options and it supports IChoiceRender as well. In addition, RadioChoice provides the wantOnSelectionChangedNotifications() method to notify the web server when the selected option changes (this is the same method seen for DropDownChoice in paragraph 9.4).
\ No newline at end of file
+Just like CheckBoxMultipleChoice, this component provides the setPrefix and setSuffix methods to configure the prefix and suffix for our options and it supports IChoiceRender as well. In addition, RadioChoice provides the wantOnSelectionChangedNotifications() method to notify the web server when the selected option changes (this is the same method seen for DropDownChoice in paragraph 9.4).
Index: guide/src/docs/guide/forms2/forms2_2.gdoc
===================================================================
--- guide/src/docs/guide/forms2/forms2_2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/forms2/forms2_2.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-A basic example of a validation rule is to make a field required. In paragraph 9.3.2 we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.
+A basic example of a validation rule is to make a field required. In [paragraph 11.3|guide:modelsforms_3] we have already seen how this can be done calling setRequired(true) on a field. However, to set a validation rule on a FormComponent we must add the corresponding validator to it.
 
 A validator is an implementation of the @org.apache.wicket.validation.IValidator@ interface and the @FormComponent@ has a version of method add which takes as input a reference of this interface. 
 
@@ -11,7 +11,7 @@
 email.add(EmailAddressValidator.getInstance());
 {code}
 
-Wicket comes with a set of built-in validators that should suit most of our needs. We will see them in paragraph 10.2.3.
+Wicket comes with a set of built-in validators that should suit most of our needs. We will see them later in this chapter.
 
 h3. Feedback messages and localization
 
@@ -24,10 +24,10 @@
 The entire infrastructure of feedback messages is built on top of the Java internationalization (I18N) support and it uses "resource bundles":http://docs.oracle.com/javase/tutorial/i18n/resbundle/index.html to store messages.
 
 {note}
-The topics of internationalization will be covered in chapter 12. For now we will give just few notions needed to understand the examples from this chapter.
+The topics of internationalization will be covered in [chapter 14|guide:i18n]. For now we will give just few notions needed to understand the examples from this chapter.
 {note}
 
-By default resource bundles are stored into properties files but we can easily configure other sources as described later in paragraph 12.4.5. 
+By default resource bundles are stored into properties files but we can easily configure other sources as described later in [paragraph 14.2|guide:i18n_2]. 
 
 Default feedback messages (like the one above for required fields) are stored in the file Application. properties placed inside Wicket the org.apache.wicket package. Opening this file we can find the key and the localized value of the message:
 
@@ -40,7 +40,7 @@
 By default FormComponent provides 3 parameters for feedback message: input (the value that failed validation), label and name (this later is the id of the component).
 
 {warning}
-Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used in paragraph 10.2.5)
+Remember that component model is updated with the user input only if validation succeeds! As a consequence, we can't retrieve the wrong value inserted for a field from its model. Instead, we should use getValue() method of FormComponent class. (This method will be introduced in the example used later in this chapter)
 {warning}
 
 h3. Displaying feedback messages and filtering them
@@ -65,7 +65,7 @@
 
 * *ComponentFeedbackMessageFilter*: shows only messages coming from a specific component.
 * *ContainerFeedbackMessageFilter*: shows only messages coming from a specific container or from any of its children components.
-* *ErrorLevelFeedbackMessageFilter*: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed in paragraph 10.2.6.
+* *ErrorLevelFeedbackMessageFilter*: shows only messages with a level of severity equals or greater than a given lower bound. Class FeedbackMessage defines a set of static constants to express different levels of severity: DEBUG, ERROR, WARNING, INFO, SUCCESS, etc.... Levels of severity for feedback messages are discussed later in this chapter.
 
 These filters are intended to be used when there are more than one feedback panel (or more than one form) in the same page. We can pass a filter to a feedback panel via its constructor or using the setFilter method. Custom filters can be created implementing the IFeedbackMessageFilter interface. An example of custom filter is illustrated later in this paragraph.
 
Index: guide/src/docs/guide/forms2/forms2_3.gdoc
===================================================================
--- guide/src/docs/guide/forms2/forms2_3.gdoc	(revision 1675105)
+++ guide/src/docs/guide/forms2/forms2_3.gdoc	(working copy)
@@ -82,7 +82,7 @@
 }
 {code}
 
-Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in chapter 12.
+Methods declared by interface IConverter take as input a Locale parameter in order to deal with locale-sensitive data and conversions. We will learn more about locales and internationalization in [paragraph 14|guide:i18n].
 
 Once we have implemented our custom converter, we must override method newConverterLocator() inside our application class and tell it to add our new converter to the default set:
 
@@ -134,4 +134,4 @@
 
 {note}
 If the user input can not be converted to the target type, FormComponent will generate the default error message “The value of '${label}' is not a valid ${type}.”. The bundle key for this message is IConverter.
-{note}
\ No newline at end of file
+{note}
Index: guide/src/docs/guide/forms2/forms2_9.gdoc
===================================================================
--- guide/src/docs/guide/forms2/forms2_9.gdoc	(revision 1675105)
+++ guide/src/docs/guide/forms2/forms2_9.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-In chapter 3.2.2 we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.
+In [chapter 5.2.2|guide:layout_2] we have seen how to use class Panel to create custom components with their own markup and with an arbitrary number of children components.
 
 While it's perfectly legal to use Panel also to group form components, the resulting component won't be itself a form component and it won't participate in the form's submission workflow. 
 
@@ -67,7 +67,7 @@
 	}
 {code}
 
-Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in chapter 12). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius. 
+Inside the onInitialize method we have created a read-only model for the label that displays the letter corresponding to the user's temperature scale. To determinate which temperature scale is in use, we retrieve the Locale from the session by calling Component's getLocale() method (we will talk more about this method in [paragraph 14|guide:i18n]). Then, if locale is the one corresponding to the United States, the chosen scale will be Fahrenheit, otherwise it will be considered as Celsius. 
 
 In the final part of onInitialize() we add the two components to our custom form component. You may have noticed that we have explicitly set the type of model object for the text field to double. This is necessary as the starting model object is a null reference and this prevents the component from automatically determining the type of its model object. 
 
@@ -119,4 +119,4 @@
 
 Since our component does not directly receive the user input, convertInput() must read this value from the inner text field using FormComponent's getConvertedInput() method which returns the input value already converted to the type specified for the component (Double in our case). Once we have the user input we convert it to kelvin degrees and we use the resulting value to set the converted input for our custom component (using method setConvertedInput(T convertedInput)).
 
-Method onBeforeRender() is responsible for synchronizing the model of the inner textfield with the model of our custom component. To do this we retrieve the model object of the custom component with the getDefaultModelObject() method, then we convert it to the temperature scale adopted by the user and finally we use this value to set the model object of the text field.
\ No newline at end of file
+Method onBeforeRender() is responsible for synchronizing the model of the inner textfield with the model of our custom component. To do this we retrieve the model object of the custom component with the getDefaultModelObject() method, then we convert it to the temperature scale adopted by the user and finally we use this value to set the model object of the text field.
Index: guide/src/docs/guide/forms2.gdoc
===================================================================
--- guide/src/docs/guide/forms2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/forms2.gdoc	(working copy)
@@ -1,5 +1,5 @@
 In the previous chapter we have only scratched the surface of Wicket forms. The Form component was not only designed to collect user input but also to extend the semantic of the classic HTML forms with new features. 
 
-One of such features is the ability to work with nested forms (they will be discussed in paragraph 10.5).
+One of such features is the ability to work with nested forms (they will be discussed in [paragraph 12.6|guide:forms2_6]).
 
-In this chapter we will continue to explore Wicket forms learning how to master them and how to build effective and user-proof forms for our web applications.
\ No newline at end of file
+In this chapter we will continue to explore Wicket forms learning how to master them and how to build effective and user-proof forms for our web applications.
Index: guide/src/docs/guide/i18n/i18n_1.gdoc
===================================================================
--- guide/src/docs/guide/i18n/i18n_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/i18n/i18n_1.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-As we have seen in chapter 10, the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the <ApplicationClassName>.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.
+As we have seen in [paragraph 12.2|guide:forms2_2], the infrastructure of feedback messages is built on top of Java internationalization (i18n) support, so it should not be surprising that the same infrastructure is used also for localization purpose. However, while so far we have used only the <ApplicationClassName>.properties file to store our custom messages, in this chapter we will see that also pages, components, validators and even Java packages can have their own resource bundles. This allows us to split bundles into multiple files keeping them close to where they are used. But before diving into the details of internationalization with Wicket, it's worthwhile to quickly review how i18n works under Java, see what classes are involved and how they are integrated into Wicket.
 
 {note}
 Providing a full description of Java support for i18n is clearly out of the scope of this document. If you need more informations about this topic you can find them in the JavaDocs and in the official "i18n tutorial":http://docs.oracle.com/javase/tutorial/i18n/index.html .
@@ -24,4 +24,4 @@
 
 The list of these candidate names is generated starting from the most specific one and subtracting an optional parameter at each step. The last name of the list corresponds to the default resource bundle which is the most general name and is equal to the base name. Once that getBundle has generated the list of candidate names, it will iterate over them to find the first one for which is possible to load a class or a properties file. The class must be a subclass of @ResourceBundle@ having as class name the full name used in the current iteration. If such a class is not found, getBundle will try to locate a properties file having a file name equals to the current full name (Java will automatically append extension .properties to the full name). For example given the resource bundle of the previous example, Java will search first for class org.foo.MyBundle_zh_CH_cmn and then for file MyBundle_zh_CH_cmn.properties inside package org.foo. If no file is found for any of the candidate names, a MissingResourceException will be thrown. Bundles contains local-dependent string resources identified by a key that is unique in the given bundle. So once we have obtained a valid bundle we can access these objects with method getString (String key).
 
-As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In chapter 10 we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In paragraph 12.4 we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
\ No newline at end of file
+As we have seen before working with feedback messages, in Wicket most of the times we will work with properties files rather than with bundle classes. In [paragraph 12.2|guide:forms2_2] we used a properties file having as base name the class name of the application class and without any information about the locale. This file is the default resource bundle for a Wicket application. In [paragraph 14.3|guide:i18n_3] we will explore the algorithm used in Wicket to locate the available bundles for a given component. Once we have learnt how to leverage this algorithm, we will be able to split our bundles into more files organized in a logical hierarchy.
Index: guide/src/docs/guide/i18n/i18n_2.gdoc
===================================================================
--- guide/src/docs/guide/i18n/i18n_2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/i18n/i18n_2.gdoc	(working copy)
@@ -60,7 +60,7 @@
 
 h3. Reading bundles from code
 
-Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in paragraph 12.4. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:
+Class Component makes reading bundles very easy with method getString(String key). This method searches for a resource with the given key looking into the resource bundles visited by the lookup algorithm illustrated in [paragraph 14.3|guide:i18n_3]. For example if we have a greeting message with key greetingMessage in our application's resource  bundle, we can read it from our component code with this instruction:
 
 {code}
 getString("greetingMessage");
@@ -68,7 +68,7 @@
 
 h3. Localization of bundles in Wicket
 
-In chapter 10 we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:
+In [paragraph 12.2|guide:forms2_2] we have used as resource bundle the properties file placed next to our application class. This file is the default resource bundle for the entire application and it is used by the lookup algorithm if it doesn't find any better match for a given component and locale. If we want to provide localized versions of this file we must simply follow the rules of Java i18n and put our translated resources into another properties file with a name corresponding to the desired locale. For example project LocalizedGreetings comes with the default application's properties file ( WicketApplication.properties) containing a greeting message:
 
 {code}
 greetingMessage=Welcome to the site!
@@ -91,7 +91,7 @@
 add(new Label("greetingMessage", model));
 {code}
 
-Class @org.apache.wicket.model.AbstractReadOnlyModel@ is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph 12.6.
+Class @org.apache.wicket.model.AbstractReadOnlyModel@ is a convenience class for implementing read-only models. In this project we have implemented a custom read-only model for illustrative purposes only because Wicket already provides built-in models for the same task. We will see them in paragraph [paragraph 14.5|guide:i18n_5].
 
 The rest of the code of the home page builds the stateless form and the drop-down menu used to change the locale.
 
Index: guide/src/docs/guide/i18n/i18n_3.gdoc
===================================================================
--- guide/src/docs/guide/i18n/i18n_3.gdoc	(revision 1675105)
+++ guide/src/docs/guide/i18n/i18n_3.gdoc	(working copy)
@@ -78,13 +78,13 @@
 
 h3. Extending the default lookup algorithm
 
-Wicket implements the default lookup algorithm using the strategy pattern1. The concrete strategies are abstracted with the interface @org.apache.wicket.resource.loader.IStringResourceLoader@. By default Wicket uses the following implementations of @IStringResourceLoader@ (sorted by execution order):
+Wicket implements the default lookup algorithm using the strategy pattern. The concrete strategies are abstracted with the interface @org.apache.wicket.resource.loader.IStringResourceLoader@. By default Wicket uses the following implementations of @IStringResourceLoader@ (sorted by execution order):
 
 # *ComponentStringResourceLoader:* implements most of the default algorithm. It searches for a given resource across bundles from the container hierarchy, from class hierarchy and from the given component.
 # *PackageStringResourceLoader:* searches into package bundles.
 # *ClassStringResourceLoader:* searches into bundles of a given class. By default the target class is the application class.
 # *ValidatorStringResourceLoader:* searches for resources into validator's bundles. A list of validators is provided by the form component that failed validation.
-# *InitializerStringResourceLoader:* this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in paragraph 15.4.
+# *InitializerStringResourceLoader:* this resource allows internationalization to interact with the initialization mechanism of the framework that will be illustrated in [paragraph 17.3|guide:advanced_3].
 
 Developer can customize lookup algorithm removing default resource loaders or adding custom implementations to the list of the resource loaders in use. This task can be accomplished using method getStringResourceLoaders of setting interface @org.apache.wicket.settings.IResourceSettings@:
 
Index: guide/src/docs/guide/i18n/i18n_4.gdoc
===================================================================
--- guide/src/docs/guide/i18n/i18n_4.gdoc	(revision 1675105)
+++ guide/src/docs/guide/i18n/i18n_4.gdoc	(working copy)
@@ -47,8 +47,8 @@
 German bundle:
 
 {code}
-selectColor.null=Wahlen sie eine farbe
-green=Grun
+selectColor.null=Wählen Sie eine Farbe
+green=Grün
 red=Rot
 blue=Blau
 yellow=Gelb
@@ -64,4 +64,4 @@
 yellow=Giallo
 {code}
 
-Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Chose one ”) used for null value. The resource key for this resource is 'null' or '<component id>.null' if we want to make it component-specific.
\ No newline at end of file
+Along with the localized versions of colors names, in the bundles above we can also find a custom value for the placeholder text (“Select a color ”) used for null value. The resource key for this resource is 'null' or '<component id>.null' if we want to make it component-specific.
Index: guide/src/docs/guide/i18n/i18n_5.gdoc
===================================================================
--- guide/src/docs/guide/i18n/i18n_5.gdoc	(revision 1675105)
+++ guide/src/docs/guide/i18n/i18n_5.gdoc	(working copy)
@@ -4,7 +4,7 @@
 
 h3. ResourceModel
 
-Model @org.apache.wicket.model.ResourceModel@ acts just like the read-only model we have implemented in paragraph 12.3.4. It simply retrieves a string resource corresponding to a given key:
+Model @org.apache.wicket.model.ResourceModel@ acts just like the read-only model we have implemented in [paragraph 14.3|guide:i18n_3]. It simply retrieves a string resource corresponding to a given key:
 
 {code}
 //build a ResourceModel for key 'greetingMessage'
@@ -90,4 +90,4 @@
 
 {code}
 new StringResourceModel("myKey", myComponent, myModel, param1, param2, param3,...);
-{code}
\ No newline at end of file
+{code}
Index: guide/src/docs/guide/i18n.gdoc
===================================================================
--- guide/src/docs/guide/i18n.gdoc	(revision 1675105)
+++ guide/src/docs/guide/i18n.gdoc	(working copy)
@@ -1 +1 @@
-In chapter 10 we have seen how the topic of localization is involved in the generation of feedback messages and we had a first contact with resource bundles. In this chapter we will continue to explore the localization support provided by Wicket and we will learn how to build pages and components ready to be localized in different languages.
\ No newline at end of file
+In [chapter 12.2|guide:forms2_2] we have seen how the topic of localization is involved in the generation of feedback messages and we had a first contact with resource bundles. In this chapter we will continue to explore the localization support provided by Wicket and we will learn how to build pages and components ready to be localized in different languages.
Index: guide/src/docs/guide/internals/pagestoring.gdoc
===================================================================
--- guide/src/docs/guide/internals/pagestoring.gdoc	(revision 1675105)
+++ guide/src/docs/guide/internals/pagestoring.gdoc	(working copy)
@@ -45,7 +45,10 @@
 
 h3. DebugDiskDataStore
 
-Wicket provides an extension of @DiskDataStore@ that can be used to browse the content of the 'data' files created by @DiskDataStore@. This debug enabled @DiskDataStore@ is automatically setup when wicket-devutils.jar is in the classpath.
+Wicket provides an extension of @DiskDataStore@ that can be used to browse the content of the 'data' files created by @DiskDataStore@. This extension can be found in wicket-devutils.jar and needs to be enabled in the @init@-method of your application via 
+{code}
+ DebugDiskDataStore.register(this);
+{code}
 The debug information can be seen at http://host:port/context/wicket/internal/debug/diskDataStore
 
 h3. HttpSessionDataStore
@@ -72,3 +75,16 @@
 }
 {code}
 
+h3. DebugBar
+
+Further insights which can be valueable during debugging can be retrieved using the @org.apache.wicket.devutils.debugbar.DebugBar@ from wicket-devutils.jar. It's a panel which you simply add:
+
+Java: 
+{code}
+add(new DebugBar("debug"));
+{code}
+
+HTML:
+{code}
+<span wicket:id="debug"/>
+{code}
Index: guide/src/docs/guide/jee/jee_3.gdoc
===================================================================
--- guide/src/docs/guide/jee/jee_3.gdoc	(revision 1675105)
+++ guide/src/docs/guide/jee/jee_3.gdoc	(working copy)
@@ -4,6 +4,7 @@
 
 {code}
   //inject a bean specifying its name with JSR-330 annotations
-  @Inject @Named("anotherName")
+  @Inject 
+  @Named("anotherName")
   private EnterpriseMessage enterpriseMessage;
-{code}
\ No newline at end of file
+{code}
Index: guide/src/docs/guide/jsintegration/jsintegration_2.gdoc
===================================================================
--- guide/src/docs/guide/jsintegration/jsintegration_2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/jsintegration/jsintegration_2.gdoc	(working copy)
@@ -81,7 +81,7 @@
 
 Next, JQueryDateField tries to retrieve the date format and the ISO language code that must be used as initialization parameters. This is done using class @ResourceModel@ which searches for a given resource in the available bundles. If no value is found for date format or for ISO language code, default values will be used ('mm/dd/yy' and 'en-GB'). 
 
-To generate the relative URL for calendar icon, we load it as package resource reference and then we use @Component@'s method urlFor to get the URL value (we have seen this method in paragraph 7.3.2).
+To generate the relative URL for calendar icon, we load it as package resource reference and then we use @Component@'s method urlFor to get the URL value (we have seen this method in [paragraph 9.3.2|guide:requestProcessing_3]).
 
 The last configuration instruction executed inside onInitialize is the instantiation of the custom converter used by our component. This converter is an instance of the built-in class @org.apache.wicket.datetime.PatternDateConvert@ and must use the previously retrieved date format to perform conversion operations. Now to tell our component to use this converter we must return it overriding @FormComponent@'s method @getConverter@. 
 
@@ -133,5 +133,5 @@
 {note}
 
 {warning}
-Our datepicker is not ready yet to be used with AJAX. In chapter 16 we will see how to modify it to make it AJAX-compatible.
-{warning}
\ No newline at end of file
+Our datepicker is not ready yet to be used with AJAX. In [chapter 18|guide:ajax] we will see how to modify it to make it AJAX-compatible.
+{warning}
Index: guide/src/docs/guide/maven/maven_1.gdoc
===================================================================
--- guide/src/docs/guide/maven/maven_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/maven/maven_1.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-As pointed out in the note at page 9, Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:
+As pointed out in the note in [paragraph 4.2|guide:helloWorld_2], Wicket can be started in two modes, DEVELOPMENT and DEPLOYMENT. When we are in DEVELOPMENT mode Wicket warns us at application startup with the following message:
 
 {code}
 ********************************************************************
@@ -11,7 +11,7 @@
 ********************************************************************
 {code}
 
-As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in three different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:
+As we can read Wicket itself discourages us from using DEVELOPMENT mode into production environment. The running mode of our application can be configured in four different ways. The first one is adding a filter parameter inside deployment descriptor web.xml:
 
 {code:html}
 <filter>      
@@ -43,4 +43,10 @@
 java -Dwicket.configuration=deployment ...
 {code}
 
-Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
\ No newline at end of file
+The last option is to set it in your Java code (e.g. in the init-method of your WebApplication):
+
+{code}
+setConfigurationType(RuntimeConfigurationType.DEPLOYMENT);
+{code}
+
+Remember that system properties overwrite other settings, so they are ideal to ensure that on production machine the running mode will be always set to DEPLOYMENT. 
Index: guide/src/docs/guide/maven/maven_2.gdoc
===================================================================
--- guide/src/docs/guide/maven/maven_2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/maven/maven_2.gdoc	(working copy)
@@ -8,7 +8,7 @@
 
 h3. From Maven to our IDE
 
-Wicket project and its dependencies are managed using Maven1. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
+Wicket project and its dependencies are managed using Maven. This tool is very useful also when we want to create a new project based on Wicket from scratch. With a couple of shell commands we can generate a new project properly configured and ready to be imported into our favourite IDE.
 The main step to create such a project is to run the command which generates project's structure and its artifacts. If we are not familiar with Maven or we simply don't want to type this command by hand, we can use the utility form on Wicket site at "http://wicket.apache.org/start/quickstart.html":http://wicket.apache.org/start/quickstart.html :
 
 !quickstart-webpage.png!
@@ -118,7 +118,7 @@
 Now that we have our project loaded into our IDE we could start coding our components directly by hand. However it would be a shame to not leverage the free and good Wicket plugins available for our IDE. The following is a brief overview of the most widely used plugins for each of the three main IDEs considered so far.
 
 *NetBeans*
-NetBeans offers Wicket support thought 'NetBeans Plugin for Wicket' hosted at "http://java.net/projects/nbwicketsupport/":http://java.net/projects/nbwicketsupport/ . This plugin is released under CDDL-1.0 license. 
+NetBeans offers Wicket support through 'NetBeans Plugin for Wicket' hosted at "http://plugins.netbeans.org/plugin/3586/wicket-1-4-support":http://plugins.netbeans.org/plugin/3586/wicket-1-4-support . This plugin is released under CDDL-1.0 license. 
 You can  find a nice introduction guide to this plugin at "http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html":http://netbeans.org/kb/docs/web/quickstart-webapps-wicket.html .
 
 *Intellj IDEA*
@@ -126,4 +126,4 @@
 
 *Eclipse*
 With Eclipse we can install one of the plugins that supports Wicket. As of the writing of this document, the most popular is probably Qwickie, available in the Eclipse Marketplace and hosted on Google Code at "http://code.google.com/p/qwickie/":http://code.google.com/p/qwickie/ .
-QWickie is released under ASF 2.0 license.
\ No newline at end of file
+QWickie is released under ASF 2.0 license.
Index: guide/src/docs/guide/modelsforms/modelsforms_1.gdoc
===================================================================
--- guide/src/docs/guide/modelsforms/modelsforms_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/modelsforms/modelsforms_1.gdoc	(working copy)
@@ -64,5 +64,5 @@
 Even if sometimes writing a custom model could be a good choice to solve a specific problem, Wicket already provides a set of IModel implementations which should fit most of our needs. In the next paragraph we will see a couple of models that allow us to easily integrate JavaBeans with our web applications and in particular with our forms.
 
 {note}
-By default class Component escapes HTML sensitive characters (like '<', '>' or '&') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML "entity":http://en.wikipedia.org/wiki/Character_entity_reference (for example '<' becomes '&lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
-{note}
\ No newline at end of file
+By default the class Component escapes HTML sensitive characters (like '<', '>' or '&') from the textual representation of its model object. The term 'escape' means that these characters will be replaced with their corresponding HTML "entity":http://en.wikipedia.org/wiki/Character_entity_reference (for example '<' becomes '&lt; '). This is done for security reasons as a malicious user could attempt to inject markup or JavaScript into our pages. If we want to display the raw content stored inside a model, we can tell the Component class not to escape characters by calling the setEscapeModelStrings(false) method.
+{note}
Index: guide/src/docs/guide/repeaters/repeaters_4.gdoc
===================================================================
--- guide/src/docs/guide/repeaters/repeaters_4.gdoc	(revision 1675105)
+++ guide/src/docs/guide/repeaters/repeaters_4.gdoc	(working copy)
@@ -2,7 +2,7 @@
 
 Wicket offers a number of components that should be used when we have to display a big number of  items (for example the results of a select SQL query). 
 
-All these components implement interface @org.apache.wicket.markup.html.navigation.paging.IPageable@ and use interface @IDataProvider@ (placed in package @org.apache.wicket.markup.repeater.data@) as data source. This interface is designed to support data paging. We will see an example of data paging later in paragraph 11.4.2. 
+All these components implement interface @org.apache.wicket.markup.html.navigation.paging.IPageable@ and use interface @IDataProvider@ (placed in package @org.apache.wicket.markup.repeater.data@) as data source. This interface is designed to support data paging. We will see an example of data paging later in [paragraph 13.4.2|guide:repeaters_4]. 
 
 The methods defined by IDataProvider are the following:
 * iterator(long first, long count): returns an iterator over a subset of the entire dataset. The subset starts from the item at position first and includes all the next count items (i.e. it's the closed interval [first,first+count]).
Index: guide/src/docs/guide/requestProcessing/requestProcessing_3.gdoc
===================================================================
--- guide/src/docs/guide/requestProcessing/requestProcessing_3.gdoc	(revision 1675105)
+++ guide/src/docs/guide/requestProcessing/requestProcessing_3.gdoc	(working copy)
@@ -4,7 +4,7 @@
 
 Method @createRequestCycle@ is declared as final, so we can't override it to return a custom subclass of @RequestCycle@. Instead, we must build a request cycle provider implementing interface @org.apache.wicket.IRequestCycleProvider@, and then we must tell our application class to use it via the @setRequestCycleProvider@ method.
 
-The current running request cycle can be retrieved at any time by calling its static method @RequestCycle.get()@. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar @get()@ method is also implemented in classes @org.apache.wicket.Application@ (as we have seen in paragraph 2.2.2) and @org.apache.wicket.Session@ in order to get the application and the session in use by the current thread.
+The current running request cycle can be retrieved at any time by calling its static method @RequestCycle.get()@. Strictly speaking this method returns the request cycle associated with the current (or local) thread, which is the thread that is serving the current request. A similar @get()@ method is also implemented in classes @org.apache.wicket.Application@ (as we have seen in [paragraph 4.2.2|guide:helloWorld_2]) and @org.apache.wicket.Session@ in order to get the application and the session in use by the current thread.
 
 {note}
 The implementation of the get method takes advantage of the standard class @java.lang.ThreadLocal@. See its JavaDoc for an introduction to local-thread variables.
@@ -40,13 +40,13 @@
 
 * a page class, via the @urlFor(Class<C> pageClass, PageParameters parameters)@ method 
 * an IRequestHandler via the @urlFor(IRequestHandler handler)@ method 
-* a ResourceReference via the @urlFor(ResourceReference reference, PageParameters params)@ method (resource entities will be introduced in chapter 13). 
+* a ResourceReference via the @urlFor(ResourceReference reference, PageParameters params)@ method (resource entities will be introduced in [chapter 15|guide:resources]). 
 
 The overloaded @urlFor@ method from above also has a corresponding version that returns an instance of @org.apache.wicket.request.Url@ instead of a @CharSequence@. This version has the prefix 'map' in its name (i.e. it has @mapUrlFor@ as full name).
 
 h3. Method setResponsePage
 
-The @RequestCycle@ class contains the implementation of the @setResponsePage@ method we use to redirect a user to a specific page (see paragraph 2.4). The namesake method of class @org.apache.wicket.Component@ is just a convenience method that internally invokes the actual implementation on current request cycle:
+The @RequestCycle@ class contains the implementation of the @setResponsePage@ method we use to redirect a user to a specific page (see [paragraph 4.4|guide:helloWorld_4]). The namesake method of class @org.apache.wicket.Component@ is just a convenience method that internally invokes the actual implementation on current request cycle:
 
 {code}
 public final void setResponsePage(final Page page) {
Index: guide/src/docs/guide/requestProcessing/requestProcessing_4.gdoc
===================================================================
--- guide/src/docs/guide/requestProcessing/requestProcessing_4.gdoc	(revision 1675105)
+++ guide/src/docs/guide/requestProcessing/requestProcessing_4.gdoc	(working copy)
@@ -32,7 +32,7 @@
 * *getAttribute(String name):* returns the value of the attribute identified by the given name, or null if the name does not correspond to any attribute.
 * *removeAttribute(String name):* removes the attribute identified by the given name.
 
-By default class WebSession will use the underlying http session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().
+By default class WebSession will use the underlying HTTP session to store attributes. Wicket will automatically add a prefix to the name of the attributes. This prefix is returned by the WebApplication's method getSessionAttributePrefix().
 
 h3. Accessing to the HTTP session
 
Index: guide/src/docs/guide/requestProcessing/requestProcessing_6.gdoc
===================================================================
--- guide/src/docs/guide/requestProcessing/requestProcessing_6.gdoc	(revision 1675105)
+++ guide/src/docs/guide/requestProcessing/requestProcessing_6.gdoc	(working copy)
@@ -2,4 +2,4 @@
 
 In this chapter we had a look at how Wicket internally handles a web request. Even if most of the time  we won't need to customize this internal process, knowing how it works is essential to use the framework at 100%.
 
-Entities like Application and Session will come in handy again when we will tackle the topic of security in chapter 20.
\ No newline at end of file
+Entities like Application and Session will come in handy again when we will tackle the topic of security in [chapter 21|guide:security].
Index: guide/src/docs/guide/resources/resources_1.gdoc
===================================================================
--- guide/src/docs/guide/resources/resources_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/resources/resources_1.gdoc	(working copy)
@@ -6,4 +6,4 @@
 
 An example of dynamic resource is the built-in class CaptchaImageResource in package @org.apache.wicket.extensions.markup.html.captcha@ which generates a captcha image each time is rendered. 
 
-As we will see in paragraph 13.6, developers can build custom resources extending base class @org.apache.wicket.request.resource.AbstractResource@.
\ No newline at end of file
+As we will see in [paragraph 15.10|guide:resources_10], developers can build custom resources extending base class @org.apache.wicket.request.resource.AbstractResource@.
Index: guide/src/docs/guide/resources/resources_10.gdoc
===================================================================
--- guide/src/docs/guide/resources/resources_10.gdoc	(revision 1675105)
+++ guide/src/docs/guide/resources/resources_10.gdoc	(working copy)
@@ -2,7 +2,7 @@
 
 In Wicket the best way to add dynamic functionalities to our application (such as csv export, a pdf generated on the fly, etc...) is implementing a custom resource. In this paragraph as example of custom resource we will build a basic RSS feeds generator which can be used to publish feeds on our site (project CustomResourceMounting). Instead of generating a RSS feed by hand we will use Rome framework and its utility classes. 
 
-As hinted above in paragraph 13.1, class @AbstractResource@ can be used as base class to implement new resources. This class defines abstract method @newResourceResponse@ which is invoked when the resource is requested. The following is the code of our RSS feeds generator:
+As hinted above in [paragraph 15.1|guide:resources_1], class @AbstractResource@ can be used as base class to implement new resources. This class defines abstract method @newResourceResponse@ which is invoked when the resource is requested. The following is the code of our RSS feeds generator:
 
 {code}
 public class RSSProducerResource extends AbstractResource {
@@ -45,4 +45,4 @@
 add(new ResourceLink("rssLink", new RSSProducerResource()));
 {code}
 
-In the next paragraphs we will see how to register a resource at application-level and how to mount it to an arbitrary URL.
\ No newline at end of file
+In the next paragraphs we will see how to register a resource at application-level and how to mount it to an arbitrary URL.
Index: guide/src/docs/guide/resources/resources_11.gdoc
===================================================================
--- guide/src/docs/guide/resources/resources_11.gdoc	(revision 1675105)
+++ guide/src/docs/guide/resources/resources_11.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-Just like pages also resources can be mounted to a specific path. Class @WebApplication@ provides method @mountResource@ which is almost identical to @mountPage@ seen in paragraph 8.6.1:
+Just like pages also resources can be mounted to a specific path. Class @WebApplication@ provides method @mountResource@ which is almost identical to @mountPage@ seen in [paragraph 10.6.1|guide:urls_6]:
 
 {code}
 @Override
@@ -34,4 +34,4 @@
   }};
   mountResource("/bar/${baz}", resourceReference);
 }
-{code}
\ No newline at end of file
+{code}
Index: guide/src/docs/guide/resources/resources_3.gdoc
===================================================================
--- guide/src/docs/guide/resources/resources_3.gdoc	(revision 1675105)
+++ guide/src/docs/guide/resources/resources_3.gdoc	(working copy)
@@ -49,7 +49,7 @@
 
 @./wicket/resource/org.wicketTutorial.CustomPanel/calendar-ver-1297887542000.jpg@
 
-The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in paragraph 8.6.4. 
+The first part of the URL is the relative path to the application root. In our example our page is already at the application's root so we have only a single-dotted segment. The next two segments, wicket and resource, are respectively the namespace and the identifier for resources seen in [paragraph 10.6.4|guide:urls_6]. 
 
 The fourth segment is the fully qualified name of the class used to locate the resource and it is the scope of the package resource. In the last segment of the URL we can find the name of the resource (the file name).
 
@@ -145,7 +145,7 @@
 
 h3. Using package resources with tag <wicket:link>
 
-In paragraph 8.3 we have used tag <wicket:link> to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:
+In [paragraph 10.3|guide:urls_3] we have used tag <wicket:link> to automatically create links to bookmarkable pages. The same technique can be used also for package resources in order to use them directly from markup file. Let's assume for example that we have a picture file called icon.png placed in the same package of the current page. Under these conditions we can display the picture file using the following markup fragment:
 
 {code:html}
 <wicket:link>
Index: guide/src/docs/guide/resources/resources_4.gdoc
===================================================================
--- guide/src/docs/guide/resources/resources_4.gdoc	(revision 1675105)
+++ guide/src/docs/guide/resources/resources_4.gdoc	(working copy)
@@ -1,6 +1,6 @@
 
 
-Wicket comes with interface @org.apache.wicket.markup.html.IHeaderContributor@ which allows components and behaviors (which will be introduced later in paragraph 15.1) to contribute to the header section of their page. The only method defined in this interface is @renderHead(IHeaderResponse response)@ where @IHeaderResponse@ is an interface which defines method @render(HeaderItem item)@ to write static resources or free-form text into the header section of the page. 
+Wicket comes with interface @org.apache.wicket.markup.html.IHeaderContributor@ which allows components and behaviors (which will be introduced later in [paragraph 17.1|guide:advanced_1]) to contribute to the header section of their page. The only method defined in this interface is @renderHead(IHeaderResponse response)@ where @IHeaderResponse@ is an interface which defines method @render(HeaderItem item)@ to write static resources or free-form text into the header section of the page. 
 
 Header entries are instances of abstract class @org.apache.wicket.markup.head.HeaderItem@. Wicket provides a set of built-in implementations of this class suited for the most common types of resources. With the exception of @PriorityHeaderItem@, every implementation of @HeaderItem@ is an abstract factory class:
 
Index: guide/src/docs/guide/resources.gdoc
===================================================================
--- guide/src/docs/guide/resources.gdoc	(revision 1675105)
+++ guide/src/docs/guide/resources.gdoc	(working copy)
@@ -1,5 +1,5 @@
 One of the biggest challenge for a web framework is to offer an efficient and consistent mechanism to handle internal resources such as CSS/JavaScript files, picture files, pdf and so on. Resources can be static (like an icon used across the site) or dynamic (they can be generated on the fly) and they can be made available to users as a download or as a simple URL.
 
-In paragraph 4.6 we have already seen how to add CSS and JavaScript contents to the header section of the page. In the first half of this chapter we will learn a more sophisticated technique that allows us to manage static resources directly from code and “pack” them with our custom components.
+In [paragraph 6.6|guide:keepControl_6] we have already seen how to add CSS and JavaScript contents to the header section of the page. In the first half of this chapter we will learn a more sophisticated technique that allows us to manage static resources directly from code and “pack” them with our custom components.
 
-Then, in the second part of the chapter we will see how to implement custom resources to enrich our web application with more complex and dynamic functionalities.
\ No newline at end of file
+Then, in the second part of the chapter we will see how to implement custom resources to enrich our web application with more complex and dynamic functionalities.
Index: guide/src/docs/guide/security/security_2.gdoc
===================================================================
--- guide/src/docs/guide/security/security_2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/security/security_2.gdoc	(working copy)
@@ -70,7 +70,7 @@
 
 h3. Role-based strategies
 
-At the end of paragraph 20.1 we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.
+At the end of [paragraph 21.1|guide:security_1] we have introduced AbstractAuthenticatedWebSession's method getRoles which is provided to support role-based authorization returning the set of roles granted to the current user.
 
 In Wicket roles are simple strings like “BASIC_USER” or “ADMIN” (they don't need to be capitalized) and they are handled with class @org.apache.wicket.authroles.authorization.strategies.role.Roles@. This class extends standard HashSet collection adding some functionalities to check whether the set contains one or more roles. Class @Roles@ already defines roles Roles.USER and Roles.ADMIN.
 
@@ -116,7 +116,7 @@
 The difference between these two strategies is that @MetaDataRoleAuthorizationStrategy@ handles role-based authorizations with Wicket metadata while @AnnotationsRoleAuthorizationStrategy@ uses Java annotations.
 
 {note}
-Application class @AuthenticatedWebApplication@ already sets @MetaDataRoleAuthorizationStrategy@ and @AnnotationsRoleAuthorizationStrategy@ as its own authorization strategies (it uses a compound strategy as we will see in paragraph 20.2).
+Application class @AuthenticatedWebApplication@ already sets @MetaDataRoleAuthorizationStrategy@ and @AnnotationsRoleAuthorizationStrategy@ as its own authorization strategies (it uses a compound strategy as we will see in [paragraph 21.2|guide:security_2]).
 
 The code that we will see in the next examples is for illustrative purpose only. If our application class inherits from @AuthenticatedWebApplication@ we won't need to configure anything to use these two strategies.
 {note}
@@ -217,7 +217,7 @@
    }
 {code}
 
-Just like custom “Page expired” page (see chapter 6.2.5), also custom “Access denied” page must be bookmarkable.
+Just like custom “Page expired” page (see [chapter 8.2.5|guide:versioningCaching_2]), also custom “Access denied” page must be bookmarkable.
 
 h4. Using roles with annotations
 
Index: guide/src/docs/guide/security/security_3.gdoc
===================================================================
--- guide/src/docs/guide/security/security_3.gdoc	(revision 1675105)
+++ guide/src/docs/guide/security/security_3.gdoc	(working copy)
@@ -4,7 +4,7 @@
 
 In Wicket we can easily protect our pages with HTTPS mounting a special request mapper called @HttpsMapper@ and using annotation RequireHttps with those pages we want to serve over this protocol. Both these two entities are in package @org.apache.wicket.protocol.https@.
 
-HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation @RequireHttps@. Most of the times the wrapped mapper will be the root one, just like we saw before for @CryptoMapper@ in paragraph 10.6.
+HttpsMapper wraps an existing mapper and redirects incoming requests to HTTPS if the related response must render a page containing annotation @RequireHttps@. Most of the times the wrapped mapper will be the root one, just like we saw before for @CryptoMapper@ in [paragraph 10.6|guide:urls_6].
 
 Another parameter needed to build a @HttpsMapper@ is an instance of class @HttpsConfi@g. This class allows us to specify which ports must be used for HTTPS and HTTP. By default the port numbers used by these two protocols are respectively 443 and 80.
 
Index: guide/src/docs/guide/testing/testing_1.gdoc
===================================================================
--- guide/src/docs/guide/testing/testing_1.gdoc	(revision 1675105)
+++ guide/src/docs/guide/testing/testing_1.gdoc	(working copy)
@@ -238,7 +238,7 @@
 
 h3. Using a custom servlet context
 
-In paragraph 13.9 we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project @CustomFolder4MarkupExample@). 
+In [paragraph 15.13|guide:resources_13] we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project @CustomFolder4MarkupExample@). 
 
 In order to write testing code for applications that use this kind of customization, we must tell @WicketTester@ which folder to use as webapp root. This is necessary as under test environment we don't have any web server, hence it's impossible for @WicketTester@ to retrieve this parameter from servlet context.
 
Index: guide/src/docs/guide/urls/urls_6.gdoc
===================================================================
--- guide/src/docs/guide/urls/urls_6.gdoc	(revision 1675105)
+++ guide/src/docs/guide/urls/urls_6.gdoc	(working copy)
@@ -1,10 +1,10 @@
 
 
-Having structured URLs in our site is a basic requirement if we want to build an efficient SEO1 strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.
+Having structured URLs in our site is a basic requirement if we want to build an efficient SEO strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.
 
 h3. Mounting a single page
 
-With Wicket we can mount a page to a given path in much the same way as we map a servlet filer to a desired path inside file web.xml (see page 9). Using mountPage(String path, Class <T> pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:
+With Wicket we can mount a page to a given path in much the same way as we map a servlet filter to a desired path inside file web.xml (see [paragraph 4.2|guide:helloWorld_2]). Using mountPage(String path, Class <T> pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:
 
 {code}
 @Override
@@ -31,7 +31,7 @@
 }
 {code}
 
-Request mappers and the Application's method mount have been introduced in the previous chapter (paragraph 9.3).
+Request mappers and the Application's method mount have been introduced in the previous chapter ([paragraph 9.3|guide:requestProcessing_3]).
 
 h3. Using parameter placeholders with mounted pages
 
@@ -111,8 +111,8 @@
 
 * Namespace: it's the first URL segment of non-mounted pages. By default its value is wicket.
 * Identifier for non-bookmarkable URLs: it's the segment that identifies non bookmarkable pages. By default its value is page.
-* Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in paragraph 8.1.1).
-* Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in chapter 13.
+* Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in [paragraph 10.1.1|guide:urls_1]).
+* Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in [chapter 15|guide:resources].
 
 IMapperContext provides a getter method for any segment listed above. By default Wicket uses class @org.apache.wicket.DefaultMapperContext@ as mapper context.
 
Index: guide/src/docs/guide/urls.gdoc
===================================================================
--- guide/src/docs/guide/urls.gdoc	(revision 1675105)
+++ guide/src/docs/guide/urls.gdoc	(working copy)
@@ -1,4 +1,4 @@
-Up to now we used component Link to move from a page to another and we have seen that it is quiet similar to a “click” event handler (see paragraph 2.4). 
+Up to now we used component Link to move from a page to another and we have seen that it is quiet similar to a “click” event handler (see [paragraph 4.4|guide:helloWorld_4]). 
 
 However this component alone is not enough to build all possible kinds of links we may need in our pages. Therefore, Wicket offers other link components suited for those tasks which can not be accomplished with a basic Link. 
 
Index: guide/src/docs/guide/versioningCaching/versioningCaching_2.gdoc
===================================================================
--- guide/src/docs/guide/versioningCaching/versioningCaching_2.gdoc	(revision 1675105)
+++ guide/src/docs/guide/versioningCaching/versioningCaching_2.gdoc	(working copy)
@@ -49,7 +49,7 @@
 For more details about page storing you can take a look at paragraph "Page storing" from chapter "Wicket Internals". The content of this paragraph is from wiki page https://cwiki.apache.org/confluence/display/WICKET/Page+Storage. 
 {note}
 
-As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In paragraph 9.6 we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.
+As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In [paragraph 11.6|guide:modelsforms_6] we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.
 
 h3. Using a specific page version with PageReference
 
@@ -62,7 +62,7 @@
 Page page = pageReference.getPage();
 {code}
 
-To get the related page instance we must use method getPage.
+To get the related page instance we must use the method getPage.
 
 h3. Turning off page versioning
 
@@ -136,4 +136,4 @@
 }
 {code}
 
-The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in paragraph 8.1.1).
+The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in [paragraph 10.1.1|guide:urls_1]).
Index: guide/src/docs/guide/versioningCaching/versioningCaching_3.gdoc
===================================================================
--- guide/src/docs/guide/versioningCaching/versioningCaching_3.gdoc	(revision 1675105)
+++ guide/src/docs/guide/versioningCaching/versioningCaching_3.gdoc	(working copy)
@@ -1,10 +1,10 @@
 
 
-Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph 10.9. 
+Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph [paragraph 12.10|guide:forms2_10]. 
 
 In Wicket a page can be stateless only if it satisfies the following requirements:
 
-# it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in chapter 8).
+# it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in [chapter 10.1|guide:urls_1]).
 # All its children components (and behaviors) are in turn stateless, which means that their method isStateless must return true.
 
 The first requirement implies that, rather than creating a page by hand, we should rely on Wicket's capability of resolving page instances, like we do when we use method setResponsePage(Class page).
Index: guide/src/docs/guide/versioningCaching/versioningCaching_4.gdoc
===================================================================
--- guide/src/docs/guide/versioningCaching/versioningCaching_4.gdoc	(revision 1675105)
+++ guide/src/docs/guide/versioningCaching/versioningCaching_4.gdoc	(working copy)
@@ -2,4 +2,4 @@
 
 In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task. 
 
-However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of chapter 10 will cover these missing topics.
\ No newline at end of file
+However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of [chapter 10|guide:urls] will cover these missing topics.
Index: guide/src/docs/guide/wicketstuff/wicketstuff_5.gdoc
===================================================================
--- guide/src/docs/guide/wicketstuff/wicketstuff_5.gdoc	(revision 1675105)
+++ guide/src/docs/guide/wicketstuff/wicketstuff_5.gdoc	(working copy)
@@ -2,7 +2,7 @@
 
 Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid. 
 
-Just like pageable repeaters (seen in paragraph 11.4) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:
+Just like pageable repeaters (seen in [paragraph 13.4|guide:repeaters_4]) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:
 
 !inmethod-grid1.png!
 
Index: guide/testing.html
===================================================================
--- guide/testing.html	(revision 1675105)
+++ guide/testing.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>22 Test Driven Development with Wicket - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -299,7 +299,7 @@
 //&#8230;
 //execute AJAX behavior, i.e. onUpdate will be invoked 
 tester.executeBehavior(ajaxBehavior));	
-//...</pre></div><p class="paragraph"/><h3>Using a custom servlet context</h3><p class="paragraph"/>In paragraph 13.9 we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project <code>CustomFolder4MarkupExample</code>).<p class="paragraph"/>In order to write testing code for applications that use this kind of customization, we must tell <code>WicketTester</code> which folder to use as webapp root. This is necessary as under test environment we don't have any web server, hence it's impossible for <code>WicketTester</code> to retrieve this parameter from servlet context.<p class="paragraph"/>Webapp root folder can be passed to <code>WicketTester</code>'s constructor as further parameter like we did in the test case of project <code>CustomFolder4MarkupExample</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class TestHomePage&#123;
+//...</pre></div><p class="paragraph"/><h3>Using a custom servlet context</h3><p class="paragraph"/>In <a href="../guide/single.html#resources_13" class="guide">paragraph 15.13</a> we have seen how to configure our application to store resource files into a custom folder placed inside webapp root folder (see project <code>CustomFolder4MarkupExample</code>).<p class="paragraph"/>In order to write testing code for applications that use this kind of customization, we must tell <code>WicketTester</code> which folder to use as webapp root. This is necessary as under test environment we don't have any web server, hence it's impossible for <code>WicketTester</code> to retrieve this parameter from servlet context.<p class="paragraph"/>Webapp root folder can be passed to <code>WicketTester</code>'s constructor as further parameter like we did in the test case of project <code>CustomFolder4MarkupExample</code>:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class TestHomePage&#123;
    <span class="java&#45;keyword">private</span> WicketTester tester;<p class="paragraph"/>   @Before
    <span class="java&#45;keyword">public</span> void setUp()&#123;
       //build the path to webapp root folder   
@@ -430,7 +430,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/testingspring.html
===================================================================
--- guide/testingspring.html	(revision 1675105)
+++ guide/testingspring.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>23 Test Driven Development with Wicket and Spring - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -324,7 +324,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/urls.html
===================================================================
--- guide/urls.html	(revision 1675105)
+++ guide/urls.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>10 Wicket Links and URL generation - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -189,7 +189,7 @@
                 
 
 <h1 id="urls">10 Wicket Links and URL generation</h1>
-Up to now we used component Link to move from a page to another and we have seen that it is quiet similar to a “click” event handler (see paragraph 2.4).<p class="paragraph"/>However this component alone is not enough to build all possible kinds of links we may need in our pages. Therefore, Wicket offers other link components suited for those tasks which can not be accomplished with a basic Link.<p class="paragraph"/>Besides learning new link components, in this chapter we will also see how to customize the page URL generated by Wicket using the encoding facility provided by the framework and the page parameters that can be passed to a target page.
+Up to now we used component Link to move from a page to another and we have seen that it is quiet similar to a “click” event handler (see <a href="../guide/single.html#helloWorld_4" class="guide">paragraph 4.4</a>).<p class="paragraph"/>However this component alone is not enough to build all possible kinds of links we may need in our pages. Therefore, Wicket offers other link components suited for those tasks which can not be accomplished with a basic Link.<p class="paragraph"/>Besides learning new link components, in this chapter we will also see how to customize the page URL generated by Wicket using the encoding facility provided by the framework and the page parameters that can be passed to a target page.
 
 
 
@@ -295,7 +295,7 @@
 
 
 <h2 id="urls_6">10.6 Generating structured and clear URLs</h2>
-<p class="paragraph"/>Having structured URLs in our site is a basic requirement if we want to build an efficient SEO1 strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.<p class="paragraph"/><h3>Mounting a single page</h3><p class="paragraph"/>With Wicket we can mount a page to a given path in much the same way as we map a servlet filer to a desired path inside file web.xml (see page 9). Using mountPage(String path, Class &#60;T&#62; pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:<p class="paragraph"/><div class="code"><pre>@Override
+<p class="paragraph"/>Having structured URLs in our site is a basic requirement if we want to build an efficient SEO strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.<p class="paragraph"/><h3>Mounting a single page</h3><p class="paragraph"/>With Wicket we can mount a page to a given path in much the same way as we map a servlet filter to a desired path inside file web.xml (see <a href="../guide/single.html#helloWorld_2" class="guide">paragraph 4.2</a>). Using mountPage(String path, Class &#60;T&#62; pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
 	<span class="java&#45;keyword">super</span>.init();
@@ -304,14 +304,14 @@
 &#125;</pre></div><p class="paragraph"/>The path provided to mountPage will be used to generate the URL for any page of the specified class:<p class="paragraph"/><div class="code"><pre>//it will <span class="java&#45;keyword">return</span> <span class="java&#45;quote">"/pageMount"</span>
 RequestCycle.get().urlFor(MountedPage.class);</pre></div><p class="paragraph"/>Under the hood the mountPage method mounts an instance of the request mapper <code>org.apache.wicket.request.mapper.MountedMapper</code> configured for the given path:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> <span class="java&#45;keyword">final</span> &#60;T <span class="java&#45;keyword">extends</span> Page&#62; void mountPage(<span class="java&#45;keyword">final</span> <span class="java&#45;object">String</span> path,<span class="java&#45;keyword">final</span> <span class="java&#45;object">Class</span>&#60;T&#62; pageClass) &#123;
 	mount(<span class="java&#45;keyword">new</span> MountedMapper(path, pageClass));
-&#125;</pre></div><p class="paragraph"/>Request mappers and the Application's method mount have been introduced in the previous chapter (paragraph 9.3).<p class="paragraph"/><h3>Using parameter placeholders with mounted pages</h3><p class="paragraph"/>The path specified for mounted pages can contain dynamic segments which are populated with the values of the named parameters used to build the page. These segments are declared using special segments called parameter placeholders. Consider the path used in the following example:<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/$&#123;foo&#125;/otherSegm"</span>, MountedPageWithPlaceholder.class);</pre></div><p class="paragraph"/>The path used above is composed by three segments: the first and the last are fixed while the second will be replaced by the value of the named parameter foo that must be provided when the page  MountedPageWithPlaceholder is instantiated:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
+&#125;</pre></div><p class="paragraph"/>Request mappers and the Application's method mount have been introduced in the previous chapter (<a href="../guide/single.html#requestProcessing_3" class="guide">paragraph 9.3</a>).<p class="paragraph"/><h3>Using parameter placeholders with mounted pages</h3><p class="paragraph"/>The path specified for mounted pages can contain dynamic segments which are populated with the values of the named parameters used to build the page. These segments are declared using special segments called parameter placeholders. Consider the path used in the following example:<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/$&#123;foo&#125;/otherSegm"</span>, MountedPageWithPlaceholder.class);</pre></div><p class="paragraph"/>The path used above is composed by three segments: the first and the last are fixed while the second will be replaced by the value of the named parameter foo that must be provided when the page  MountedPageWithPlaceholder is instantiated:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
 pageParameters.add(<span class="java&#45;quote">"foo"</span>, <span class="java&#45;quote">"foo"</span>);<p class="paragraph"/>setResponsePage(MountedPageWithPlaceholder.class, pageParameters)</pre></div><p class="paragraph"/>Generated URL:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/pageMount/foo/otherSegm</pre></div><p class="paragraph"/>On the contrary if we manually insert an URL like '&#60;web app path&#62;/pageMount/bar/otherSegm', we can read value 'bar' retrieving the named parameter foo inside our page.<p class="paragraph"/>Place holders can be declared as optional using the '#' character in place of '$':<p class="paragraph"/><div class="code"><pre>mountPage(<span class="java&#45;quote">"/pageMount/&#35;&#123;foo&#125;/otherSegm"</span>, MountedPageOptionalPlaceholder.class);</pre></div><p class="paragraph"/>If the named parameter for an optional placeholder is missing, the corresponding segment is removed from the final URL:<p class="paragraph"/>Java code:<p class="paragraph"/><div class="code"><pre>PageParameters pageParameters = <span class="java&#45;keyword">new</span> PageParameters();
 setResponsePage(MountedPageWithPlaceholder.class, pageParameters);</pre></div><p class="paragraph"/>Generated URL:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/pageMount/otherSegm</pre></div><p class="paragraph"/><h3>Mounting a package</h3><p class="paragraph"/>In addition to mounting a single page, Wicket allows to mount all of the pages inside a package to a given path. Method mountPackage(String path, Class&#60;T&#62; pageClass) of class WepApplication will mount every page inside pageClass's package to the specified path.<p class="paragraph"/>The resulting URL for package-mounted pages will have the following structure:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/mountedPath/&#60;PageClassName&#62;&#91;optional query string&#93;</pre></div><p class="paragraph"/>For example in the MountedPagesExample project we have mounted all pages inside the subpackage org.tutorialWicket.subPackage with this line of code:<p class="paragraph"/><div class="code"><pre>mountPackage(<span class="java&#45;quote">"/mountPackage"</span>, StatefulPackageMount.class);</pre></div><p class="paragraph"/>StatefulPackageMount is one of the pages placed into the desired package and its URL will be:<p class="paragraph"/><div class="code"><pre>&#60;Application path&#62;/mountPackage/StatefulPackageMount?1</pre></div><p class="paragraph"/>Similarly to what is done by the mountPage method, the implementation of the mountPackage method mounts an instance of <code>org.apache.wicket.request.mapper.PackageMapper</code> to the given path.<p class="paragraph"/><h3>Providing custom mapper context to request mappers</h3><p class="paragraph"/>Interface <code>org.apache.wicket.request.mapper.IMapperContext</code> is used by request mappers to create new page instances and to retrieve static URL segments used to build and parse page URLs. Here is the list of these segments:
 <ul class="star">
 <li>Namespace: it's the first URL segment of non-mounted pages. By default its value is wicket.</li>
 <li>Identifier for non-bookmarkable URLs: it's the segment that identifies non bookmarkable pages. By default its value is page.</li>
-<li>Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in paragraph 8.1.1).</li>
-<li>Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in chapter 13.</li>
+<li>Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in <a href="../guide/single.html#urls_1" class="guide">paragraph 10.1.1</a>).</li>
+<li>Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in <a href="../guide/single.html#resources" class="guide">chapter 15</a>.</li>
 </ul><p class="paragraph"/>IMapperContext provides a getter method for any segment listed above. By default Wicket uses class <code>org.apache.wicket.DefaultMapperContext</code> as mapper context.<p class="paragraph"/>Project CustomMapperContext is an example of customization of mapper context where we use index as identifier for non-bookmarkable pages and staticURL as identifier for bookmarkable pages. In this project, instead of implementing our mapper context from scratch, we used DefaultMapperContext as base class overriding just the two methods we need to achieve the desired result (getBookmarkableIdentifier() and getPageIdentifier()).  The final implementation is the following:<p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">public</span> class CustomMapperContext <span class="java&#45;keyword">extends</span> DefaultMapperContext&#123;<p class="paragraph"/>	@Override
 	<span class="java&#45;keyword">public</span> <span class="java&#45;object">String</span> getBookmarkableIdentifier() &#123;
 		<span class="java&#45;keyword">return</span> <span class="java&#45;quote">"staticURL"</span>;
@@ -372,7 +372,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/versioningCaching.html
===================================================================
--- guide/versioningCaching.html	(revision 1675105)
+++ guide/versioningCaching.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>8 Page versioning and caching - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -207,10 +207,10 @@
 		&#125;);<p class="paragraph"/>	&#125;	
 &#125;</pre></div><p class="paragraph"/>Now if we run the new example (project LifeCycleStagesRevisited) and we click on the “Reload” button, a new page version is created and the page id is increased by one:<p class="paragraph"/><img border="0" class="center" src="../img/reload-page.png"></img><p class="paragraph"/>If we press the back button the page version previously rendered (and serialized) will be retrieved (i.e. deserialized) and it will be used again to respond to our request (and page id is decremented):<p class="paragraph"/><img border="0" class="center" src="../img/browser-back.png"></img><p class="paragraph"/><blockquote class="note">
 For more details about page storing you can take a look at paragraph "Page storing" from chapter "Wicket Internals". The content of this paragraph is from wiki page https://cwiki.apache.org/confluence/display/WICKET/Page+Storage. 
-</blockquote><p class="paragraph"/>As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In paragraph 9.6 we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.<p class="paragraph"/><h3>Using a specific page version with PageReference</h3><p class="paragraph"/>To retrieve a specific page version in our code we can use class <code>org.apache.wicket.PageReference</code> by providing its constructor with the corresponding page id:<p class="paragraph"/><div class="code"><pre>//load page version with page id = 3
+</blockquote><p class="paragraph"/>As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In <a href="../guide/single.html#modelsforms_6" class="guide">paragraph 11.6</a> we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.<p class="paragraph"/><h3>Using a specific page version with PageReference</h3><p class="paragraph"/>To retrieve a specific page version in our code we can use class <code>org.apache.wicket.PageReference</code> by providing its constructor with the corresponding page id:<p class="paragraph"/><div class="code"><pre>//load page version with page id = 3
 PageReference pageReference = <span class="java&#45;keyword">new</span> PageReference(3);
 //load the related page instance
-Page page = pageReference.getPage();</pre></div><p class="paragraph"/>To get the related page instance we must use method getPage.<p class="paragraph"/><h3>Turning off page versioning</h3><p class="paragraph"/>If for any reason we need to switch off versioning for a given page, we can call its method setVersioned(false).<p class="paragraph"/><h3>Pluggable serialization</h3><p class="paragraph"/>Starting from version 1.5 it is possible to choose which implementation of Java serialization will be used by Wicket to store page versions. Wicket serializes pages using an implementation of interface <code>org.apache.wicket.serialize.ISerializer</code>. The default implementation is <code>org.apache.wicket.serialize.java.JavaSerializer</code> and it uses the standard Java serialization mechanism based on classes ObjectOutputStream and ObjectInputStream. However on Internet we can find other interesting serialization libraries like <a href="https://github.com/EsotericSoftware/kryo" target="blank">Kryo</a> or <a href="http://ruedigermoeller.github.io/fast-serialization/" target="blank">Fast</a> which perform faster then the standard implementation. The serializer in use can be customized with the setSerializer(ISerializer) method defined by setting interface <code>org.apache.wicket.settings.IFrameworkSettings</code>.<p class="paragraph"/>We can access this interface inside the method init of the class Application using the getFrameworkSettings() method :<p class="paragraph"/><div class="code"><pre>@Override
+Page page = pageReference.getPage();</pre></div><p class="paragraph"/>To get the related page instance we must use the method getPage.<p class="paragraph"/><h3>Turning off page versioning</h3><p class="paragraph"/>If for any reason we need to switch off versioning for a given page, we can call its method setVersioned(false).<p class="paragraph"/><h3>Pluggable serialization</h3><p class="paragraph"/>Starting from version 1.5 it is possible to choose which implementation of Java serialization will be used by Wicket to store page versions. Wicket serializes pages using an implementation of interface <code>org.apache.wicket.serialize.ISerializer</code>. The default implementation is <code>org.apache.wicket.serialize.java.JavaSerializer</code> and it uses the standard Java serialization mechanism based on classes ObjectOutputStream and ObjectInputStream. However on Internet we can find other interesting serialization libraries like <a href="https://github.com/EsotericSoftware/kryo" target="blank">Kryo</a> or <a href="http://ruedigermoeller.github.io/fast-serialization/" target="blank">Fast</a> which perform faster then the standard implementation. The serializer in use can be customized with the setSerializer(ISerializer) method defined by setting interface <code>org.apache.wicket.settings.IFrameworkSettings</code>.<p class="paragraph"/>We can access this interface inside the method init of the class Application using the getFrameworkSettings() method :<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">public</span> void init()
 &#123;
 	<span class="java&#45;keyword">super</span>.init();
@@ -232,14 +232,14 @@
 	<span class="java&#45;keyword">super</span>.init();
 	getApplicationSettings().setPageExpiredErrorPage(
 				CustomExpiredErrorPage.class);
-&#125;</pre></div><p class="paragraph"/>The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in paragraph 8.1.1).
+&#125;</pre></div><p class="paragraph"/>The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in <a href="../guide/single.html#urls_1" class="guide">paragraph 10.1.1</a>).
 
 
 
 <h2 id="versioningCaching_3">8.3 Stateless pages</h2>
-<p class="paragraph"/>Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph 10.9.<p class="paragraph"/>In Wicket a page can be stateless only if it satisfies the following requirements:
+<p class="paragraph"/>Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph <a href="../guide/single.html#forms2_10" class="guide">paragraph 12.10</a>.<p class="paragraph"/>In Wicket a page can be stateless only if it satisfies the following requirements:
 <ol>
-<li>it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in chapter 8).</li>
+<li>it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in <a href="../guide/single.html#urls_1" class="guide">chapter 10.1</a>).</li>
 <li>All its children components (and behaviors) are in turn stateless, which means that their method isStateless must return true.</li>
 </ol><p class="paragraph"/>The first requirement implies that, rather than creating a page by hand, we should rely on Wicket's capability of resolving page instances, like we do when we use method setResponsePage(Class page).<p class="paragraph"/>In order to comply with the second requirement it could be helpful to check if all children components of a page are stateless. To do this we can leverage method visitChildren and the visitor pattern to iterate over components and test if their method isStateless actually returns true:<p class="paragraph"/><div class="code"><pre>@Override
 <span class="java&#45;keyword">protected</span> void onInitialize() &#123;
@@ -264,9 +264,10 @@
 
 
 <h2 id="versioningCaching_4">8.4 Summary</h2>
-<p class="paragraph"/>In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task.<p class="paragraph"/>However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of chapter 10 will cover these missing topics.
+<p class="paragraph"/>In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task.<p class="paragraph"/>However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of <a href="../guide/single.html#urls" class="guide">chapter 10</a> will cover these missing topics.
 
 
+
                 <div style="clear:both;margin-top:15px;"></div>
                 
                     <div class="toc-item prev-left"><a href="../guide/componentLifecycle.html">&lt;&lt; <strong>7</strong><span>Components lifecycle</span></a></div>
@@ -293,7 +294,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/whyLearn.html
===================================================================
--- guide/whyLearn.html	(revision 1675105)
+++ guide/whyLearn.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>3 Why should I learn Wicket? - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -247,7 +247,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: guide/wicketstuff.html
===================================================================
--- guide/wicketstuff.html	(revision 1675105)
+++ guide/wicketstuff.html	(working copy)
@@ -151,7 +151,7 @@
                 <div class="project">
                     <h1>27 Project WicketStuff (Appendix) - Reference Documentation</h1>
 
-                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                    <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
 
                     <p><strong>Version:</strong> 6.x</p>
 
@@ -262,7 +262,7 @@
 
 
 <h2 id="wicketstuff_5">27.5 Module wicketstuff-inmethod-grid</h2>
-<p class="paragraph"/>Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid.<p class="paragraph"/>Just like pageable repeaters (seen in paragraph 11.4) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid1.png"></img><p class="paragraph"/>DataGrid supports also editable cells and row selection:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid2.png"></img><p class="paragraph"/>The following snippet illustrate how to use DataGrid and is taken from wiki page <a href="https://github.com/wicketstuff/core/wiki/InMethodGrid" target="blank">https://github.com/wicketstuff/core/wiki/InMethodGrid</a> :<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#8230;
+<p class="paragraph"/>Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid.<p class="paragraph"/>Just like pageable repeaters (seen in <a href="../guide/single.html#repeaters_4" class="guide">paragraph 13.4</a>) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid1.png"></img><p class="paragraph"/>DataGrid supports also editable cells and row selection:<p class="paragraph"/><img border="0" class="center" src="../img/inmethod-grid2.png"></img><p class="paragraph"/>The following snippet illustrate how to use DataGrid and is taken from wiki page <a href="https://github.com/wicketstuff/core/wiki/InMethodGrid" target="blank">https://github.com/wicketstuff/core/wiki/InMethodGrid</a> :<p class="paragraph"/><strong class="bold">HTML:</strong><p class="paragraph"/><div class="code"><pre>&#8230;
   &#60;div wicket:id=<span class="java&#45;quote">"grid"</span>&#62;Grid&#60;/div&#62;
 ...</pre></div><p class="paragraph"/><strong class="bold">Java code:</strong><p class="paragraph"/><div class="code"><pre><span class="java&#45;keyword">final</span> List&#60;Person&#62; personList = //load a list of Persons
 <span class="java&#45;keyword">final</span> ListDataProvider listDataProvider = <span class="java&#45;keyword">new</span> ListDataProvider(personList);
@@ -333,7 +333,7 @@
 <div id="footer">
     
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-10)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
     
 </div>
Index: index.html
===================================================================
--- index.html	(revision 1675105)
+++ index.html	(working copy)
@@ -111,7 +111,7 @@
 
                         <div class="project">
                             <h1>Apache Wicket User Guide - Reference Documentation</h1>
-                            <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko</p>
+                            <p><strong>Authors:</strong> Andrea Del Bene, Martin Grigorov, Carsten Hufe, Christian Kroemer, Daniel Bartl, Paul Borș, Tobias Soloschenko, Joachim Rohde</p>
                             <p><strong>Version:</strong> 6.x</p>
                             
                         </div>
@@ -525,7 +525,7 @@
         <div id="footer">
             
 Copyright &copy; 2013-2015 — <a href="http://www.apache.org/" target="_blank">The Apache Software Foundation</a> 
-                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-08)</b>
+                      — <b style="color:#E8590A !important;">(Generated on: 2015-04-21)</b>
 
             
         </div>
