You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/07/19 14:26:15 UTC

svn commit: r1611904 [12/15] - in /wicket/common/site/trunk/_site: ./ 2009/07/30/ 2009/08/21/ 2009/10/12/ 2009/10/24/ 2009/12/13/ 2009/12/21/ 2010/02/01/ 2010/03/05/ 2010/05/03/ 2010/05/24/ 2010/08/04/ 2010/08/11/ 2010/08/24/ 2010/09/09/ 2010/09/17/ 20...

Modified: wicket/common/site/trunk/_site/learn/examples/guestbook.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/learn/examples/guestbook.html?rev=1611904&r1=1611903&r2=1611904&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/learn/examples/guestbook.html (original)
+++ wicket/common/site/trunk/_site/learn/examples/guestbook.html Sat Jul 19 12:26:11 2014
@@ -187,227 +187,265 @@
 
 		<div id="contentbody">
 			<h1>Guestbook</h1>
-			<p>The GuestBook application allows users to enter comments that appear on a page like a weblog. Drawing the list of comments is very easy with the Wicket <code>ListView</code> component. This example also gives an impression of what form handling is like.</p>
+			<p>The GuestBook application allows users to enter comments that appear on a
+page like a weblog. Drawing the list of comments is very easy with the Wicket
+<code>ListView</code> component. This example also gives an impression of what form
+handling is like.</p>
 
 <p><img src="guestbook.png" alt="Guestbook screenshot" /></p>
 
-<p>As with all examples, you have to put all files in the same package directory. This means putting the markup files and the java files next to one another. It is possible to alter this behavior, but that is beyond the scope of this example.</p>
+<p>As with all examples, you have to put all files in the same package
+directory. This means putting the markup files and the java files next to one
+another. It is possible to alter this behavior, but that is beyond the scope
+of this example.</p>
 
 <h2 id="commentjava">Comment.java</h2>
 
 <p>The Comment POJO model is very straightforward:</p>
-<div class='highlight'><pre><code class='java'><span class='kn'>package</span> <span class='n'>org</span><span class='o'>.</span><span class='na'>apache</span><span class='o'>.</span><span class='na'>wicket</span><span class='o'>.</span><span class='na'>examples</span><span class='o'>.</span><span class='na'>guestbook</span><span class='o'>;</span>
 
-<span class='kn'>import</span> <span class='nn'>java.util.Date</span><span class='o'>;</span>  
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.IClusterable</span><span class='o'>;</span>
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">package</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">wicket</span><span class="o">.</span><span class="na">examples</span><span class="o">.</span><span class="na">guestbook</span><span class="o">;</span>
 
-<span class='kd'>public</span> <span class='kd'>class</span> <span class='nc'>Comment</span> <span class='kd'>implements</span> <span class='n'>IClusterable</span> <span class='o'>{</span>
-    <span class='kd'>private</span> <span class='n'>String</span> <span class='n'>text</span><span class='o'>;</span>
-    <span class='kd'>private</span> <span class='n'>Date</span> <span class='n'>date</span> <span class='o'>=</span> <span class='k'>new</span> <span class='n'>Date</span><span class='o'>();</span>
-
-    <span class='kd'>public</span> <span class='nf'>Comment</span><span class='o'>()</span> <span class='o'>{</span>
-    <span class='o'>}</span>
-
-    <span class='kd'>public</span> <span class='nf'>Comment</span><span class='o'>(</span><span class='kd'>final</span> <span class='n'>Comment</span> <span class='n'>comment</span><span class='o'>)</span> <span class='o'>{</span>
-        <span class='k'>this</span><span class='o'>.</span><span class='na'>text</span> <span class='o'>=</span> <span class='n'>comment</span><span class='o'>.</span><span class='na'>text</span><span class='o'>;</span>
-        <span class='k'>this</span><span class='o'>.</span><span class='na'>date</span> <span class='o'>=</span> <span class='n'>comment</span><span class='o'>.</span><span class='na'>date</span><span class='o'>;</span>
-    <span class='o'>}</span>
-
-    <span class='kd'>public</span> <span class='n'>String</span> <span class='nf'>getText</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='k'>return</span> <span class='n'>text</span><span class='o'>;</span>
-    <span class='o'>}</span>
-
-    <span class='kd'>public</span> <span class='kt'>void</span> <span class='nf'>setText</span><span class='o'>(</span><span class='n'>String</span> <span class='n'>text</span><span class='o'>)</span> <span class='o'>{</span>
-        <span class='k'>this</span><span class='o'>.</span><span class='na'>text</span> <span class='o'>=</span> <span class='n'>text</span><span class='o'>;</span>
-    <span class='o'>}</span>
-
-    <span class='kd'>public</span> <span class='n'>Date</span> <span class='nf'>getDate</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='k'>return</span> <span class='n'>date</span><span class='o'>;</span>
-    <span class='o'>}</span>
-
-    <span class='kd'>public</span> <span class='kt'>void</span> <span class='nf'>setDate</span><span class='o'>(</span><span class='n'>Date</span> <span class='n'>date</span><span class='o'>)</span> <span class='o'>{</span>
-        <span class='k'>this</span><span class='o'>.</span><span class='na'>date</span> <span class='o'>=</span> <span class='n'>date</span><span class='o'>;</span>
-    <span class='o'>}</span>
-
-    <span class='kd'>public</span> <span class='n'>String</span> <span class='nf'>toString</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='k'>return</span> <span class='s'>&quot;[Comment date = &quot;</span> <span class='o'>+</span> <span class='n'>date</span> <span class='o'>+</span> <span class='s'>&quot;, text = &quot;</span> <span class='o'>+</span> <span class='n'>text</span> <span class='o'>+</span> <span class='s'>&quot;]&quot;</span><span class='o'>;</span>
-    <span class='o'>}</span>
-<span class='o'>}</span>
-</code></pre></div>
-<h2 id="guestbookjava">GuestBook.java</h2>
-
-<p>In the file <code>GuestBook.java</code> we have put the Java component code for the guestbook page. This is the homepage for the guestbook application. The page consists of a form for entering new items to the guestbook and a list of repeating markup for showing the guestbook entries.</p>
-
-<p>The <code>GuestBook</code> constructor adds a <code>CommentForm</code> and a <code>ListView</code> of the comments. Notice how the model is passed in as the second argument to the <code>ListView</code> constructor.</p>
-
-<p>Then as the view renders, the <code>populateItem</code> method is called passing in a <code>ListItem</code> container for the current row in the list.</p>
+<span class="kn">import</span> <span class="nn">java.util.Date</span><span class="o">;</span>  
+<span class="kn">import</span> <span class="nn">org.apache.wicket.IClusterable</span><span class="o">;</span>
 
-<p>The implementation below obtains the <code>Comment</code> POJO from the list item and adds label components for the date and text of the <code>Comment</code>. This is all accomplished in just a few lines of code.</p>
-<div class='highlight'><pre><code class='java'><span class='kn'>package</span> <span class='n'>org</span><span class='o'>.</span><span class='na'>apache</span><span class='o'>.</span><span class='na'>wicket</span><span class='o'>.</span><span class='na'>examples</span><span class='o'>.</span><span class='na'>guestbook</span><span class='o'>;</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Comment</span> <span class="kd">implements</span> <span class="n">IClusterable</span> <span class="o">{</span>
+    <span class="kd">private</span> <span class="n">String</span> <span class="n">text</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="n">Date</span> <span class="n">date</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Date</span><span class="o">();</span>
+
+    <span class="kd">public</span> <span class="nf">Comment</span><span class="o">()</span> <span class="o">{</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="nf">Comment</span><span class="o">(</span><span class="kd">final</span> <span class="n">Comment</span> <span class="n">comment</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">text</span> <span class="o">=</span> <span class="n">comment</span><span class="o">.</span><span class="na">text</span><span class="o">;</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">date</span> <span class="o">=</span> <span class="n">comment</span><span class="o">.</span><span class="na">date</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="n">String</span> <span class="nf">getText</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">text</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setText</span><span class="o">(</span><span class="n">String</span> <span class="n">text</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="n">Date</span> <span class="nf">getDate</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">date</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setDate</span><span class="o">(</span><span class="n">Date</span> <span class="n">date</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">date</span> <span class="o">=</span> <span class="n">date</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="n">String</span> <span class="nf">toString</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="s">&quot;[Comment date = &quot;</span> <span class="o">+</span> <span class="n">date</span> <span class="o">+</span> <span class="s">&quot;, text = &quot;</span> <span class="o">+</span> <span class="n">text</span> <span class="o">+</span> <span class="s">&quot;]&quot;</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span></code></pre></div>
 
-<span class='kn'>import</span> <span class='nn'>java.util.ArrayList</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>java.util.Collections</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>java.util.Date</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>java.util.List</span><span class='o'>;</span>
-
-<span class='kn'>import</span> <span class='nn'>org.apache.commons.lang.StringUtils</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.examples.WicketExamplePage</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.basic.Label</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.basic.MultiLineLabel</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.form.Form</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.form.TextArea</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.form.TextField</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.list.ListItem</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.list.PropertyListView</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.model.CompoundPropertyModel</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.util.value.ValueMap</span><span class='o'>;</span>
-
-
-<span class='kd'>public</span> <span class='kd'>final</span> <span class='kd'>class</span> <span class='nc'>GuestBook</span> <span class='kd'>extends</span> <span class='n'>WicketExamplePage</span> <span class='o'>{</span>
-    <span class='cm'>/** A global list of all comments from all users across all sessions */</span>
-    <span class='kd'>private</span> <span class='kd'>static</span> <span class='kd'>final</span> <span class='n'>List</span><span class='o'>&lt;</span><span class='n'>Comment</span><span class='o'>&gt;</span> <span class='n'>commentList</span> <span class='o'>=</span> <span class='n'>Collections</span><span class='o'>.</span><span class='na'>synchronizedList</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>ArrayList</span><span class='o'>&lt;</span><span class='n'>Comment</span><span class='o'>&gt;());</span>
-
-    <span class='cm'>/**</span>
-<span class='cm'>     * Constructor that is invoked when page is invoked without a session.</span>
-<span class='cm'>     */</span>
-    <span class='kd'>public</span> <span class='nf'>GuestBook</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='c1'>// Add comment form</span>
-        <span class='n'>add</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>CommentForm</span><span class='o'>(</span><span class='s'>&quot;commentForm&quot;</span><span class='o'>));</span>
-
-        <span class='c1'>// Add commentListView of existing comments</span>
-        <span class='n'>add</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>PropertyListView</span><span class='o'>&lt;</span><span class='n'>Comment</span><span class='o'>&gt;(</span><span class='s'>&quot;comments&quot;</span><span class='o'>,</span> <span class='n'>commentList</span><span class='o'>)</span> <span class='o'>{</span>
-            <span class='nd'>@Override</span>
-            <span class='kd'>public</span> <span class='kt'>void</span> <span class='nf'>populateItem</span><span class='o'>(</span><span class='kd'>final</span> <span class='n'>ListItem</span><span class='o'>&lt;</span><span class='n'>Comment</span><span class='o'>&gt;</span> <span class='n'>listItem</span><span class='o'>)</span> <span class='o'>{</span>
-                <span class='n'>listItem</span><span class='o'>.</span><span class='na'>add</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>Label</span><span class='o'>(</span><span class='s'>&quot;date&quot;</span><span class='o'>));</span>
-                <span class='n'>listItem</span><span class='o'>.</span><span class='na'>add</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>MultiLineLabel</span><span class='o'>(</span><span class='s'>&quot;text&quot;</span><span class='o'>));</span>
-            <span class='o'>}</span>
-        <span class='o'>}).</span><span class='na'>setVersioned</span><span class='o'>(</span><span class='kc'>false</span><span class='o'>);</span>
-    <span class='o'>}</span>
-
-    <span class='cm'>/**</span>
-<span class='cm'>     * A form that allows a user to add a comment.</span>
-<span class='cm'>     */</span>
-    <span class='kd'>public</span> <span class='kd'>final</span> <span class='kd'>class</span> <span class='nc'>CommentForm</span> <span class='kd'>extends</span> <span class='n'>Form</span><span class='o'>&lt;</span><span class='n'>ValueMap</span><span class='o'>&gt;</span> <span class='o'>{</span>
-        <span class='kd'>public</span> <span class='nf'>CommentForm</span><span class='o'>(</span><span class='kd'>final</span> <span class='n'>String</span> <span class='n'>id</span><span class='o'>)</span> <span class='o'>{</span>
-            <span class='c1'>// Construct form with no validation listener</span>
-            <span class='kd'>super</span><span class='o'>(</span><span class='n'>id</span><span class='o'>,</span> <span class='k'>new</span> <span class='n'>CompoundPropertyModel</span><span class='o'>&lt;</span><span class='n'>ValueMap</span><span class='o'>&gt;(</span><span class='k'>new</span> <span class='n'>ValueMap</span><span class='o'>()));</span>
-
-            <span class='c1'>// this is just to make the unit test happy</span>
-            <span class='n'>setMarkupId</span><span class='o'>(</span><span class='s'>&quot;commentForm&quot;</span><span class='o'>);</span>
-
-            <span class='c1'>// Add text entry widget</span>
-            <span class='n'>add</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>TextArea</span><span class='o'>&lt;</span><span class='n'>String</span><span class='o'>&gt;(</span><span class='s'>&quot;text&quot;</span><span class='o'>).</span><span class='na'>setType</span><span class='o'>(</span><span class='n'>String</span><span class='o'>.</span><span class='na'>class</span><span class='o'>));</span>
-
-            <span class='c1'>// Add simple automated spam prevention measure.</span>
-            <span class='n'>add</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>TextField</span><span class='o'>&lt;</span><span class='n'>String</span><span class='o'>&gt;(</span><span class='s'>&quot;comment&quot;</span><span class='o'>).</span><span class='na'>setType</span><span class='o'>(</span><span class='n'>String</span><span class='o'>.</span><span class='na'>class</span><span class='o'>));</span>
-        <span class='o'>}</span>
-
-        <span class='cm'>/**</span>
-<span class='cm'>         * Show the resulting valid edit</span>
-<span class='cm'>         */</span>
-        <span class='nd'>@Override</span>
-        <span class='kd'>public</span> <span class='kd'>final</span> <span class='kt'>void</span> <span class='nf'>onSubmit</span><span class='o'>()</span> <span class='o'>{</span>
-            <span class='n'>ValueMap</span> <span class='n'>values</span> <span class='o'>=</span> <span class='n'>getModelObject</span><span class='o'>();</span>
-
-            <span class='c1'>// check if the honey pot is filled</span>
-            <span class='k'>if</span> <span class='o'>(</span><span class='n'>StringUtils</span><span class='o'>.</span><span class='na'>isNotBlank</span><span class='o'>((</span><span class='n'>String</span><span class='o'>)</span><span class='n'>values</span><span class='o'>.</span><span class='na'>get</span><span class='o'>(</span><span class='s'>&quot;comment&quot;</span><span class='o'>)))</span> <span class='o'>{</span>
-                <span class='n'>error</span><span class='o'>(</span><span class='s'>&quot;Caught a spammer!!!&quot;</span><span class='o'>);</span>
-                <span class='k'>return</span><span class='o'>;</span>
-            <span class='o'>}</span>
-            <span class='c1'>// Construct a copy of the edited comment</span>
-            <span class='n'>Comment</span> <span class='n'>comment</span> <span class='o'>=</span> <span class='k'>new</span> <span class='n'>Comment</span><span class='o'>();</span>
-
-            <span class='c1'>// Set date of comment to add</span>
-            <span class='n'>comment</span><span class='o'>.</span><span class='na'>setDate</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>Date</span><span class='o'>());</span>
-            <span class='n'>comment</span><span class='o'>.</span><span class='na'>setText</span><span class='o'>((</span><span class='n'>String</span><span class='o'>)</span><span class='n'>values</span><span class='o'>.</span><span class='na'>get</span><span class='o'>(</span><span class='s'>&quot;text&quot;</span><span class='o'>));</span>
-            <span class='n'>commentList</span><span class='o'>.</span><span class='na'>add</span><span class='o'>(</span><span class='mi'>0</span><span class='o'>,</span> <span class='n'>comment</span><span class='o'>);</span>
-
-            <span class='c1'>// Clear out the text component</span>
-            <span class='n'>values</span><span class='o'>.</span><span class='na'>put</span><span class='o'>(</span><span class='s'>&quot;text&quot;</span><span class='o'>,</span> <span class='s'>&quot;&quot;</span><span class='o'>);</span>
-        <span class='o'>}</span>
-    <span class='o'>}</span>
-
-    <span class='cm'>/**</span>
-<span class='cm'>     * Clears the comments.</span>
-<span class='cm'>     */</span>
-    <span class='kd'>public</span> <span class='kd'>static</span> <span class='kt'>void</span> <span class='nf'>clear</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='n'>commentList</span><span class='o'>.</span><span class='na'>clear</span><span class='o'>();</span>
-    <span class='o'>}</span>
-<span class='o'>}</span>
-</code></pre></div>
-<p>When the <code>CommentForm</code> is submitted, the <code>onSubmit()</code> method is called. Notice that nothing gets the value of the <code>TextArea</code> that was added in the <code>CommentForm</code> constructor. This is because the comment is the model and the third parameter to the <code>TextArea</code> constructor specified the property of the model to update. So all <code>onSubmit()</code> has to do is create a new comment from the model that was updated and add it to the comment list. When the page redraws, the new list will be rendered.</p>
-
-<p>We use a synchronized list as our shared static model used by <code>commentListView</code> (<code>commentList</code>) to ensure that it is only updated by one thread at a time. Remember, this is a multi-user application with a shared model!</p>
+<h2 id="guestbookjava">GuestBook.java</h2>
 
-<p>Finally, you may notice the call to <code>commentListView.modelChanged()</code>. This informs the list view that its model has been modified. In more advanced usage scenarios, this would allow Wicket to expire stale pages accessed with the browser’s back button.</p>
+<p>In the file <code>GuestBook.java</code> we have put the Java component code for the
+guestbook page. This is the homepage for the guestbook application. The page
+consists of a form for entering new items to the guestbook and a list of
+repeating markup for showing the guestbook entries.</p>
+
+<p>The <code>GuestBook</code> constructor adds a <code>CommentForm</code> and a <code>ListView</code> of
+the comments. Notice how the model is passed in as the second argument to the
+<code>ListView</code> constructor.</p>
+
+<p>Then as the view renders, the <code>populateItem</code> method is called passing in a
+<code>ListItem</code> container for the current row in the list.</p>
+
+<p>The implementation below obtains the <code>Comment</code> POJO from the list item and
+adds label components for the date and text of the <code>Comment</code>. This is all
+accomplished in just a few lines of code.</p>
+
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">package</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">wicket</span><span class="o">.</span><span class="na">examples</span><span class="o">.</span><span class="na">guestbook</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">java.util.ArrayList</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">java.util.Collections</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">java.util.Date</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">java.util.List</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">org.apache.commons.lang.StringUtils</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.examples.WicketExamplePage</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.basic.Label</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.basic.MultiLineLabel</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.form.Form</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.form.TextArea</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.form.TextField</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.list.ListItem</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.list.PropertyListView</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.model.CompoundPropertyModel</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.util.value.ValueMap</span><span class="o">;</span>
+
+
+<span class="kd">public</span> <span class="kd">final</span> <span class="kd">class</span> <span class="nc">GuestBook</span> <span class="kd">extends</span> <span class="n">WicketExamplePage</span> <span class="o">{</span>
+    <span class="cm">/** A global list of all comments from all users across all sessions */</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">List</span><span class="o">&lt;</span><span class="n">Comment</span><span class="o">&gt;</span> <span class="n">commentList</span> <span class="o">=</span> <span class="n">Collections</span><span class="o">.</span><span class="na">synchronizedList</span><span class="o">(</span><span class="k">new</span> <span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">Comment</span><span class="o">&gt;());</span>
+
+    <span class="cm">/**</span>
+<span class="cm">     * Constructor that is invoked when page is invoked without a session.</span>
+<span class="cm">     */</span>
+    <span class="kd">public</span> <span class="nf">GuestBook</span><span class="o">()</span> <span class="o">{</span>
+        <span class="c1">// Add comment form</span>
+        <span class="n">add</span><span class="o">(</span><span class="k">new</span> <span class="nf">CommentForm</span><span class="o">(</span><span class="s">&quot;commentForm&quot;</span><span class="o">));</span>
+
+        <span class="c1">// Add commentListView of existing comments</span>
+        <span class="n">add</span><span class="o">(</span><span class="k">new</span> <span class="n">PropertyListView</span><span class="o">&lt;</span><span class="n">Comment</span><span class="o">&gt;(</span><span class="s">&quot;comments&quot;</span><span class="o">,</span> <span class="n">commentList</span><span class="o">)</span> <span class="o">{</span>
+            <span class="nd">@Override</span>
+            <span class="kd">public</span> <span class="kt">void</span> <span class="nf">populateItem</span><span class="o">(</span><span class="kd">final</span> <span class="n">ListItem</span><span class="o">&lt;</span><span class="n">Comment</span><span class="o">&gt;</span> <span class="n">listItem</span><span class="o">)</span> <span class="o">{</span>
+                <span class="n">listItem</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="k">new</span> <span class="nf">Label</span><span class="o">(</span><span class="s">&quot;date&quot;</span><span class="o">));</span>
+                <span class="n">listItem</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="k">new</span> <span class="nf">MultiLineLabel</span><span class="o">(</span><span class="s">&quot;text&quot;</span><span class="o">));</span>
+            <span class="o">}</span>
+        <span class="o">}).</span><span class="na">setVersioned</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="cm">/**</span>
+<span class="cm">     * A form that allows a user to add a comment.</span>
+<span class="cm">     */</span>
+    <span class="kd">public</span> <span class="kd">final</span> <span class="kd">class</span> <span class="nc">CommentForm</span> <span class="kd">extends</span> <span class="n">Form</span><span class="o">&lt;</span><span class="n">ValueMap</span><span class="o">&gt;</span> <span class="o">{</span>
+        <span class="kd">public</span> <span class="nf">CommentForm</span><span class="o">(</span><span class="kd">final</span> <span class="n">String</span> <span class="n">id</span><span class="o">)</span> <span class="o">{</span>
+            <span class="c1">// Construct form with no validation listener</span>
+            <span class="kd">super</span><span class="o">(</span><span class="n">id</span><span class="o">,</span> <span class="k">new</span> <span class="n">CompoundPropertyModel</span><span class="o">&lt;</span><span class="n">ValueMap</span><span class="o">&gt;(</span><span class="k">new</span> <span class="nf">ValueMap</span><span class="o">()));</span>
+
+            <span class="c1">// this is just to make the unit test happy</span>
+            <span class="n">setMarkupId</span><span class="o">(</span><span class="s">&quot;commentForm&quot;</span><span class="o">);</span>
+
+            <span class="c1">// Add text entry widget</span>
+            <span class="n">add</span><span class="o">(</span><span class="k">new</span> <span class="n">TextArea</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;(</span><span class="s">&quot;text&quot;</span><span class="o">).</span><span class="na">setType</span><span class="o">(</span><span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">));</span>
+
+            <span class="c1">// Add simple automated spam prevention measure.</span>
+            <span class="n">add</span><span class="o">(</span><span class="k">new</span> <span class="n">TextField</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;(</span><span class="s">&quot;comment&quot;</span><span class="o">).</span><span class="na">setType</span><span class="o">(</span><span class="n">String</span><span class="o">.</span><span class="na">class</span><span class="o">));</span>
+        <span class="o">}</span>
+
+        <span class="cm">/**</span>
+<span class="cm">         * Show the resulting valid edit</span>
+<span class="cm">         */</span>
+        <span class="nd">@Override</span>
+        <span class="kd">public</span> <span class="kd">final</span> <span class="kt">void</span> <span class="nf">onSubmit</span><span class="o">()</span> <span class="o">{</span>
+            <span class="n">ValueMap</span> <span class="n">values</span> <span class="o">=</span> <span class="n">getModelObject</span><span class="o">();</span>
+
+            <span class="c1">// check if the honey pot is filled</span>
+            <span class="k">if</span> <span class="o">(</span><span class="n">StringUtils</span><span class="o">.</span><span class="na">isNotBlank</span><span class="o">((</span><span class="n">String</span><span class="o">)</span><span class="n">values</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">&quot;comment&quot;</span><span class="o">)))</span> <span class="o">{</span>
+                <span class="n">error</span><span class="o">(</span><span class="s">&quot;Caught a spammer!!!&quot;</span><span class="o">);</span>
+                <span class="k">return</span><span class="o">;</span>
+            <span class="o">}</span>
+            <span class="c1">// Construct a copy of the edited comment</span>
+            <span class="n">Comment</span> <span class="n">comment</span> <span class="o">=</span> <span class="k">new</span> <span class="nf">Comment</span><span class="o">();</span>
+
+            <span class="c1">// Set date of comment to add</span>
+            <span class="n">comment</span><span class="o">.</span><span class="na">setDate</span><span class="o">(</span><span class="k">new</span> <span class="nf">Date</span><span class="o">());</span>
+            <span class="n">comment</span><span class="o">.</span><span class="na">setText</span><span class="o">((</span><span class="n">String</span><span class="o">)</span><span class="n">values</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">&quot;text&quot;</span><span class="o">));</span>
+            <span class="n">commentList</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="n">comment</span><span class="o">);</span>
+
+            <span class="c1">// Clear out the text component</span>
+            <span class="n">values</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="s">&quot;text&quot;</span><span class="o">,</span> <span class="s">&quot;&quot;</span><span class="o">);</span>
+        <span class="o">}</span>
+    <span class="o">}</span>
+
+    <span class="cm">/**</span>
+<span class="cm">     * Clears the comments.</span>
+<span class="cm">     */</span>
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">clear</span><span class="o">()</span> <span class="o">{</span>
+        <span class="n">commentList</span><span class="o">.</span><span class="na">clear</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span></code></pre></div>
+
+<p>When the <code>CommentForm</code> is submitted, the <code>onSubmit()</code> method is called.
+Notice that nothing gets the value of the <code>TextArea</code> that was added in the
+<code>CommentForm</code> constructor. This is because the comment is the model and the
+third parameter to the <code>TextArea</code> constructor specified the property of the
+model to update. So all <code>onSubmit()</code> has to do is create a new comment from
+the model that was updated and add it to the comment list. When the page
+redraws, the new list will be rendered.</p>
+
+<p>We use a synchronized list as our shared static model used by <code>commentListView</code>
+(<code>commentList</code>) to ensure that it is only updated by one thread at a time.
+Remember, this is a multi-user application with a shared model!</p>
+
+<p>Finally, you may notice the call to <code>commentListView.modelChanged()</code>. This
+informs the list view that its model has been modified. In more advanced
+usage scenarios, this would allow Wicket to expire stale pages accessed with
+the browser’s back button.</p>
 
 <h2 id="guestbookhtml">GuestBook.html</h2>
 
-<p>In the HTML below, notice the way that the <code>TextArea</code> component is being nested inside the <code>CommentForm</code>. Wicket is able to keep everything straight because the Java <code>Component.add()</code> calls have to result in the same nesting structure as the HTML.</p>
-
-<p>Finally, notice the <code>&lt;wicket:remove&gt;</code> block. This is simply markup that is there for previewing purposes only. When the page renders, it is stripped out.</p>
-<div class='highlight'><pre><code class='html'><span class='nt'>&lt;html</span> <span class='na'>xmlns:wicket=</span><span class='s'>&quot;http://wicket.apache.org/&quot;</span><span class='nt'>&gt;</span>
-<span class='nt'>&lt;head&gt;</span>
-    <span class='nt'>&lt;title&gt;</span>Wicket Examples - guestbook<span class='nt'>&lt;/title&gt;</span>
-    <span class='nt'>&lt;link</span> <span class='na'>rel=</span><span class='s'>&quot;stylesheet&quot;</span> <span class='na'>type=</span><span class='s'>&quot;text/css&quot;</span> <span class='na'>href=</span><span class='s'>&quot;style.css&quot;</span><span class='nt'>/&gt;</span>
-<span class='nt'>&lt;/head&gt;</span>
-<span class='nt'>&lt;body&gt;</span>
-  <span class='nt'>&lt;span</span> <span class='na'>wicket:id=</span><span class='s'>&quot;mainNavigation&quot;</span><span class='nt'>/&gt;</span>
+<p>In the HTML below, notice the way that the <code>TextArea</code> component is being
+nested inside the <code>CommentForm</code>. Wicket is able to keep everything straight
+because the Java <code>Component.add()</code> calls have to result in the same nesting
+structure as the HTML.</p>
+
+<p>Finally, notice the <code>&lt;wicket:remove&gt;</code> block. This is simply markup that is
+there for previewing purposes only. When the page renders, it is stripped
+out.</p>
+
+<div class="highlight"><pre><code class="language-html" data-lang="html"><span class="nt">&lt;html</span> <span class="na">xmlns:wicket=</span><span class="s">&quot;http://wicket.apache.org/&quot;</span><span class="nt">&gt;</span>
+<span class="nt">&lt;head&gt;</span>
+    <span class="nt">&lt;title&gt;</span>Wicket Examples - guestbook<span class="nt">&lt;/title&gt;</span>
+    <span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;stylesheet&quot;</span> <span class="na">type=</span><span class="s">&quot;text/css&quot;</span> <span class="na">href=</span><span class="s">&quot;style.css&quot;</span><span class="nt">/&gt;</span>
+<span class="nt">&lt;/head&gt;</span>
+<span class="nt">&lt;body&gt;</span>
+  <span class="nt">&lt;span</span> <span class="na">wicket:id=</span><span class="s">&quot;mainNavigation&quot;</span><span class="nt">/&gt;</span>
 
-  <span class='nt'>&lt;form</span> <span class='na'>wicket:id=</span><span class='s'>&quot;commentForm&quot;</span><span class='nt'>&gt;</span>
+  <span class="nt">&lt;form</span> <span class="na">wicket:id=</span><span class="s">&quot;commentForm&quot;</span><span class="nt">&gt;</span>
     Add your comment here:
-    <span class='nt'>&lt;p&gt;</span>
-    <span class='nt'>&lt;textarea</span> <span class='na'>wicket:id=</span><span class='s'>&quot;text&quot;</span><span class='nt'>&gt;</span>This is a comment<span class='nt'>&lt;/textarea&gt;</span>
-    <span class='nt'>&lt;input</span> <span class='na'>type=</span><span class='s'>&quot;text&quot;</span> <span class='na'>wicket:id=</span><span class='s'>&quot;comment&quot;</span> <span class='na'>class=</span><span class='s'>&quot;nospam&quot;</span> <span class='na'>onfocus=</span><span class='s'>&quot;getElementById(&#39;formsubmit&#39;).focus();&quot;</span><span class='nt'>/&gt;</span>
-    <span class='nt'>&lt;p&gt;</span>
-    <span class='nt'>&lt;input</span> <span class='na'>type=</span><span class='s'>&quot;submit&quot;</span> <span class='na'>value=</span><span class='s'>&quot;Submit&quot;</span> <span class='na'>id=</span><span class='s'>&quot;formsubmit&quot;</span><span class='nt'>/&gt;</span>
-  <span class='nt'>&lt;/form&gt;</span>
-  <span class='nt'>&lt;p/&gt;</span>
-  <span class='nt'>&lt;span</span> <span class='na'>wicket:id=</span><span class='s'>&quot;comments&quot;</span><span class='nt'>&gt;</span>
-    <span class='nt'>&lt;p&gt;</span>
-        <span class='nt'>&lt;span</span> <span class='na'>wicket:id=</span><span class='s'>&quot;date&quot;</span><span class='nt'>&gt;</span>1/1/2004<span class='nt'>&lt;/span&gt;&lt;br&gt;</span>
-        <span class='nt'>&lt;span</span> <span class='na'>wicket:id=</span><span class='s'>&quot;text&quot;</span><span class='nt'>&gt;</span>Comment text goes here.<span class='nt'>&lt;/span&gt;</span>
-    <span class='nt'>&lt;/p&gt;</span>
-  <span class='nt'>&lt;/span&gt;</span>
-  <span class='nt'>&lt;wicket:remove&gt;</span>
-    <span class='nt'>&lt;p&gt;</span>
-        1/2/2004<span class='nt'>&lt;br/&gt;</span>
+    <span class="nt">&lt;p&gt;</span>
+    <span class="nt">&lt;textarea</span> <span class="na">wicket:id=</span><span class="s">&quot;text&quot;</span><span class="nt">&gt;</span>This is a comment<span class="nt">&lt;/textarea&gt;</span>
+    <span class="nt">&lt;input</span> <span class="na">type=</span><span class="s">&quot;text&quot;</span> <span class="na">wicket:id=</span><span class="s">&quot;comment&quot;</span> <span class="na">class=</span><span class="s">&quot;nospam&quot;</span> <span class="na">onfocus=</span><span class="s">&quot;getElementById(&#39;formsubmit&#39;).focus();&quot;</span><span class="nt">/&gt;</span>
+    <span class="nt">&lt;p&gt;</span>
+    <span class="nt">&lt;input</span> <span class="na">type=</span><span class="s">&quot;submit&quot;</span> <span class="na">value=</span><span class="s">&quot;Submit&quot;</span> <span class="na">id=</span><span class="s">&quot;formsubmit&quot;</span><span class="nt">/&gt;</span>
+  <span class="nt">&lt;/form&gt;</span>
+  <span class="nt">&lt;p/&gt;</span>
+  <span class="nt">&lt;span</span> <span class="na">wicket:id=</span><span class="s">&quot;comments&quot;</span><span class="nt">&gt;</span>
+    <span class="nt">&lt;p&gt;</span>
+        <span class="nt">&lt;span</span> <span class="na">wicket:id=</span><span class="s">&quot;date&quot;</span><span class="nt">&gt;</span>1/1/2004<span class="nt">&lt;/span&gt;&lt;br&gt;</span>
+        <span class="nt">&lt;span</span> <span class="na">wicket:id=</span><span class="s">&quot;text&quot;</span><span class="nt">&gt;</span>Comment text goes here.<span class="nt">&lt;/span&gt;</span>
+    <span class="nt">&lt;/p&gt;</span>
+  <span class="nt">&lt;/span&gt;</span>
+  <span class="nt">&lt;wicket:remove&gt;</span>
+    <span class="nt">&lt;p&gt;</span>
+        1/2/2004<span class="nt">&lt;br/&gt;</span>
         More comment text here.
-    <span class='nt'>&lt;/p&gt;</span>
-  <span class='nt'>&lt;/wicket:remove&gt;</span>
-<span class='nt'>&lt;/body&gt;</span>
-<span class='nt'>&lt;/html&gt;</span>
-</code></pre></div>
+    <span class="nt">&lt;/p&gt;</span>
+  <span class="nt">&lt;/wicket:remove&gt;</span>
+<span class="nt">&lt;/body&gt;</span>
+<span class="nt">&lt;/html&gt;</span></code></pre></div>
+
 <h2 id="guestbookapplicationjava">GuestBookApplication.java</h2>
 
-<p>For completeness, we’ve included the <code>GuestBookApplication</code> class, and as a final treat the modifications to the <code>web.xml</code> file.</p>
-<div class='highlight'><pre><code class='java'><span class='kn'>package</span> <span class='n'>org</span><span class='o'>.</span><span class='na'>apache</span><span class='o'>.</span><span class='na'>wicket</span><span class='o'>.</span><span class='na'>examples</span><span class='o'>.</span><span class='na'>guestbook</span><span class='o'>;</span>
+<p>For completeness, we’ve included the <code>GuestBookApplication</code> class, and as a
+final treat the modifications to the <code>web.xml</code> file.</p>
+
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">package</span> <span class="n">org</span><span class="o">.</span><span class="na">apache</span><span class="o">.</span><span class="na">wicket</span><span class="o">.</span><span class="na">examples</span><span class="o">.</span><span class="na">guestbook</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">org.apache.wicket.Page</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.examples.WicketExampleApplication</span><span class="o">;</span>
 
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.Page</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.examples.WicketExampleApplication</span><span class='o'>;</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">GuestBookApplication</span> <span class="kd">extends</span> <span class="n">WicketExampleApplication</span> <span class="o">{</span>
+    <span class="kd">public</span> <span class="nf">GuestBookApplication</span><span class="o">()</span> <span class="o">{</span>
+    <span class="o">}</span>
+
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">Class</span><span class="o">&lt;</span> <span class="o">?</span> <span class="kd">extends</span> <span class="n">Page</span><span class="o">&gt;</span> <span class="nf">getHomePage</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">GuestBook</span><span class="o">.</span><span class="na">class</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span></code></pre></div>
 
-<span class='kd'>public</span> <span class='kd'>class</span> <span class='nc'>GuestBookApplication</span> <span class='kd'>extends</span> <span class='n'>WicketExampleApplication</span> <span class='o'>{</span>
-    <span class='kd'>public</span> <span class='nf'>GuestBookApplication</span><span class='o'>()</span> <span class='o'>{</span>
-    <span class='o'>}</span>
-
-    <span class='nd'>@Override</span>
-    <span class='kd'>public</span> <span class='n'>Class</span><span class='o'>&lt;</span> <span class='o'>?</span> <span class='kd'>extends</span> <span class='n'>Page</span><span class='o'>&gt;</span> <span class='n'>getHomePage</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='k'>return</span> <span class='n'>GuestBook</span><span class='o'>.</span><span class='na'>class</span><span class='o'>;</span>
-    <span class='o'>}</span>
-<span class='o'>}</span>
-</code></pre></div>
 <h2 id="webxml">web.xml</h2>
 
-<p>Add the following two sections (servlet and servlet-mapping) to your web.xml file for running this application.</p>
-<div class='highlight'><pre><code class='xml'><span class='nt'>&lt;filter&gt;</span>
-    <span class='nt'>&lt;filter-name&gt;</span>GuestBookApplication<span class='nt'>&lt;/filter-name&gt;</span>
-    <span class='nt'>&lt;filter-class&gt;</span>org.apache.wicket.protocol.http.WicketFilter<span class='nt'>&lt;/filter-class&gt;</span>
-    <span class='nt'>&lt;init-param&gt;</span>
-      <span class='nt'>&lt;param-name&gt;</span>applicationClassName<span class='nt'>&lt;/param-name&gt;</span>
-      <span class='nt'>&lt;param-value&gt;</span>org.apache.wicket.examples.guestbook.GuestBookApplication<span class='nt'>&lt;/param-value&gt;</span>
-    <span class='nt'>&lt;/init-param&gt;</span>
-<span class='nt'>&lt;/filter&gt;</span>
-</code></pre></div>
+<p>Add the following two sections (servlet and servlet-mapping) to your web.xml
+file for running this application.</p>
+
+<div class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="nt">&lt;filter&gt;</span>
+    <span class="nt">&lt;filter-name&gt;</span>GuestBookApplication<span class="nt">&lt;/filter-name&gt;</span>
+    <span class="nt">&lt;filter-class&gt;</span>org.apache.wicket.protocol.http.WicketFilter<span class="nt">&lt;/filter-class&gt;</span>
+    <span class="nt">&lt;init-param&gt;</span>
+      <span class="nt">&lt;param-name&gt;</span>applicationClassName<span class="nt">&lt;/param-name&gt;</span>
+      <span class="nt">&lt;param-value&gt;</span>org.apache.wicket.examples.guestbook.GuestBookApplication<span class="nt">&lt;/param-value&gt;</span>
+    <span class="nt">&lt;/init-param&gt;</span>
+<span class="nt">&lt;/filter&gt;</span></code></pre></div>
+
+
 		</div>
         <div id="clearer"></div>
 		<div id="footer"><span>

Modified: wicket/common/site/trunk/_site/learn/examples/helloworld.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/learn/examples/helloworld.html?rev=1611904&r1=1611903&r2=1611904&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/learn/examples/helloworld.html (original)
+++ wicket/common/site/trunk/_site/learn/examples/helloworld.html Sat Jul 19 12:26:11 2014
@@ -187,112 +187,148 @@
 
 		<div id="contentbody">
 			<h1>Hello World!</h1>
-			<p>HelloWorld demonstrates the basic structure of a web application in Wicket. A Label component is used to display a message on the home page for the application.</p>
-
-<p>In all the Wicket examples, you have to put all files in the same package directory. This means putting the markup files and the java files next to one another. It is possible to alter this behavior, but that is beyond the scope of this example. The only exception is the obligatory web.xml file which should reside in the WEB-INF/ directory of your web application root folder.</p>
-
-<p>If you wish to start building this example, you may want to take a look at the Wicket Quickstart project, which provides a quick way of getting up and running without having to figure things out yourself. The Quickstart project contains the necessary build files (Ant and Maven), libraries, minimal set of Java and markup files and an embedded Jetty server to run your application without having to go through the whole build-deploy cycle.</p>
+			<p>HelloWorld demonstrates the basic structure of a web application in Wicket. A
+Label component is used to display a message on the home page for the
+application.</p>
+
+<p>In all the Wicket examples, you have to put all files in the same package
+directory. This means putting the markup files and the java files next to one
+another. It is possible to alter this behavior, but that is beyond the scope
+of this example. The only exception is the obligatory web.xml file which
+should reside in the WEB-INF/ directory of your web application root folder.</p>
+
+<p>If you wish to start building this example, you may want to take a look at the
+Wicket Quickstart project, which provides a quick way of getting up and
+running without having to figure things out yourself. The Quickstart project
+contains the necessary build files (Ant and Maven), libraries, minimal set of
+Java and markup files and an embedded Jetty server to run your application
+without having to go through the whole build-deploy cycle.</p>
 
 <h3 id="helloworldapplicationjava">HelloWorldApplication.java</h3>
 
-<p>Each Wicket application is defined by an Application object. This object defines what the home page is, and allows for some configuration.</p>
-<div class='highlight'><pre><code class='java'><span class='kn'>import</span> <span class='nn'>org.apache.wicket.protocol.http.WebApplication</span><span class='o'>;</span>
+<p>Each Wicket application is defined by an Application object. This object
+defines what the home page is, and allows for some configuration.</p>
+
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">import</span> <span class="nn">org.apache.wicket.protocol.http.WebApplication</span><span class="o">;</span>
 
-<span class='kd'>public</span> <span class='kd'>class</span> <span class='nc'>HelloWorldApplication</span> <span class='kd'>extends</span> <span class='n'>WebApplication</span> <span class='o'>{</span>
-    <span class='kd'>public</span> <span class='nf'>HelloWorldApplication</span><span class='o'>()</span> <span class='o'>{</span>
-    <span class='o'>}</span>
-
-    <span class='cm'>/**</span>
-<span class='cm'>     * @see org.apache.wicket.Application#getHomePage()</span>
-<span class='cm'>     */</span>
-    <span class='nd'>@Override</span>
-    <span class='kd'>public</span> <span class='n'>Class</span> <span class='nf'>getHomePage</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='k'>return</span> <span class='n'>HelloWorld</span><span class='o'>.</span><span class='na'>class</span><span class='o'>;</span>
-    <span class='o'>}</span>
-<span class='o'>}</span>
-</code></pre></div>
-<p>Here you can see that we define <code>wicket.examples.helloworld.HelloWorld</code> to be our home page. When the base URL of our application is requested, the markup rendered by the HelloWorld page is returned.</p>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloWorldApplication</span> <span class="kd">extends</span> <span class="n">WebApplication</span> <span class="o">{</span>
+    <span class="kd">public</span> <span class="nf">HelloWorldApplication</span><span class="o">()</span> <span class="o">{</span>
+    <span class="o">}</span>
+
+    <span class="cm">/**</span>
+<span class="cm">     * @see org.apache.wicket.Application#getHomePage()</span>
+<span class="cm">     */</span>
+    <span class="nd">@Override</span>
+    <span class="kd">public</span> <span class="n">Class</span> <span class="nf">getHomePage</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">HelloWorld</span><span class="o">.</span><span class="na">class</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span></code></pre></div>
+
+<p>Here you can see that we define <code>wicket.examples.helloworld.HelloWorld</code> to be
+our home page. When the base URL of our application is requested, the markup
+rendered by the HelloWorld page is returned.</p>
 
 <h3 id="helloworldjava">HelloWorld.java</h3>
-<div class='highlight'><pre><code class='java'><span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.WebPage</span><span class='o'>;</span>
-<span class='kn'>import</span> <span class='nn'>org.apache.wicket.markup.html.basic.Label</span><span class='o'>;</span>
 
-<span class='kd'>public</span> <span class='kd'>class</span> <span class='nc'>HelloWorld</span> <span class='kd'>extends</span> <span class='n'>WebPage</span> <span class='o'>{</span>
-    <span class='kd'>public</span> <span class='nf'>HelloWorld</span><span class='o'>()</span> <span class='o'>{</span>
-        <span class='n'>add</span><span class='o'>(</span><span class='k'>new</span> <span class='n'>Label</span><span class='o'>(</span><span class='s'>&quot;message&quot;</span><span class='o'>,</span> <span class='s'>&quot;Hello World!&quot;</span><span class='o'>));</span>
-    <span class='o'>}</span>
-<span class='o'>}</span>
-</code></pre></div>
+<div class="highlight"><pre><code class="language-java" data-lang="java"><span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.WebPage</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.wicket.markup.html.basic.Label</span><span class="o">;</span>
+
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloWorld</span> <span class="kd">extends</span> <span class="n">WebPage</span> <span class="o">{</span>
+    <span class="kd">public</span> <span class="nf">HelloWorld</span><span class="o">()</span> <span class="o">{</span>
+        <span class="n">add</span><span class="o">(</span><span class="k">new</span> <span class="nf">Label</span><span class="o">(</span><span class="s">&quot;message&quot;</span><span class="o">,</span> <span class="s">&quot;Hello World!&quot;</span><span class="o">));</span>
+    <span class="o">}</span>
+<span class="o">}</span></code></pre></div>
+
 <p>The Label is constructed using two parameters:</p>
 
 <ol>
-<li>
-<p>“message”</p>
-</li>
-
-<li>
-<p>“Hello World!”</p>
-</li>
+  <li>
+    <p>“message”</p>
+  </li>
+  <li>
+    <p>“Hello World!”</p>
+  </li>
 </ol>
 
-<p>The first parameter is the component identifier, which Wicket uses to identify the <code>Label</code> component in your HTML markup. The second parameter is the message which the <code>Label</code> should render.</p>
+<p>The first parameter is the component identifier, which Wicket uses to identify
+the <code>Label</code> component in your HTML markup. The second parameter is the message
+which the <code>Label</code> should render.</p>
 
 <h3 id="helloworldhtml">HelloWorld.html</h3>
 
 <p>The HTML file that defines our Hello World functionality is as follows:</p>
-<div class='highlight'><pre><code class='html'><span class='nt'>&lt;html&gt;</span>
-<span class='nt'>&lt;body&gt;</span>
-    <span class='nt'>&lt;span</span> <span class='na'>wicket:id=</span><span class='s'>&quot;message&quot;</span><span class='nt'>&gt;</span>Message goes here<span class='nt'>&lt;/span&gt;</span>
-<span class='nt'>&lt;/body&gt;</span>
-<span class='nt'>&lt;/html&gt;</span>
-</code></pre></div>
+
+<div class="highlight"><pre><code class="language-html" data-lang="html"><span class="nt">&lt;html&gt;</span>
+<span class="nt">&lt;body&gt;</span>
+    <span class="nt">&lt;span</span> <span class="na">wicket:id=</span><span class="s">&quot;message&quot;</span><span class="nt">&gt;</span>Message goes here<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;/body&gt;</span>
+<span class="nt">&lt;/html&gt;</span></code></pre></div>
+
 <p>In this file, you see two elements that need some attention:</p>
 
 <ul>
-<li>
-<p>the component declaration <code>&lt;span wicket:id=&quot;message&quot;&gt;</code></p>
-</li>
-
-<li>
-<p>the text <code>Message goes here</code></p>
-</li>
+  <li>
+    <p>the component declaration <code>&lt;span wicket:id="message"&gt;</code></p>
+  </li>
+  <li>
+    <p>the text <code>Message goes here</code></p>
+  </li>
 </ul>
 
-<p>The component declaration consists of the Wicket identifier <code>wicket:id</code> and the component identifier <code>message</code>. The component identifier should be the same as the name of the component you defined in your <code>WebPage</code>. The text between the <code>&lt;span&gt;</code> tags is removed when the component renders its message. The final content of the component is determined by your Java code.</p>
+<p>The component declaration consists of the Wicket identifier <code>wicket:id</code> and the
+component identifier <code>message</code>. The component identifier should be the same as
+the name of the component you defined in your <code>WebPage</code>. The text between
+the <code>&lt;span&gt;</code> tags is removed when the component renders its message. The final
+content of the component is determined by your Java code.</p>
 
 <h3 id="webxml">web.xml</h3>
 
-<p>In order to deploy our HelloWorld program, we need to make our application known to the application server by means of the web.xml file.</p>
-<div class='highlight'><pre><code class='xml'><span class='cp'>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
-<span class='cp'>&lt;!DOCTYPE web-app</span>
-<span class='cp'>      PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;</span>
-<span class='cp'>      &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;</span>
-
-<span class='nt'>&lt;web-app&gt;</span>
-    <span class='nt'>&lt;display-name&gt;</span>Wicket Examples<span class='nt'>&lt;/display-name&gt;</span>
-    <span class='nt'>&lt;filter&gt;</span>
-        <span class='nt'>&lt;filter-name&gt;</span>HelloWorldApplication<span class='nt'>&lt;/filter-name&gt;</span>
-        <span class='nt'>&lt;filter-class&gt;</span>org.apache.wicket.protocol.http.WicketFilter<span class='nt'>&lt;/filter-class&gt;</span>
-        <span class='nt'>&lt;init-param&gt;</span>
-          <span class='nt'>&lt;param-name&gt;</span>applicationClassName<span class='nt'>&lt;/param-name&gt;</span>
-          <span class='nt'>&lt;param-value&gt;</span>org.apache.wicket.examples.helloworld.HelloWorldApplication<span class='nt'>&lt;/param-value&gt;</span>
-        <span class='nt'>&lt;/init-param&gt;</span>
-    <span class='nt'>&lt;/filter&gt;</span>
-    <span class='nt'>&lt;filter-mapping&gt;</span>
-        <span class='nt'>&lt;filter-name&gt;</span>HelloWorldApplication<span class='nt'>&lt;/filter-name&gt;</span>
-        <span class='nt'>&lt;url-pattern&gt;</span>/*<span class='nt'>&lt;/url-pattern&gt;</span>
-    <span class='nt'>&lt;/filter-mapping&gt;</span>
-<span class='nt'>&lt;/web-app&gt;</span>
-</code></pre></div>
-<p>In this definition you see the Wicket filter defined, which handles all requests. In order to let Wicket know which application is available, only the applicationClassName filter parameter is needed.</p>
-
-<p>Also, notice the url-mapping to /*. The Wicket filter will only process requests that are Wicket requests. If a request is not Wicket related, the filter will pass the request on to the chain. This ensures that (static) resources outside the realm of the Wicket application, such as style sheets, JavaScript files, images and so forth will be served by the container.</p>
-
-<h2 id="ready_to_deploy">Ready to deploy</h2>
+<p>In order to deploy our HelloWorld program, we need to make our application
+known to the application server by means of the web.xml file.</p>
 
-<p>That’s it. No more configuration necessary! All you need to do now is to deploy the web application into your favorite application server. Point your browser to the url: <code>http://&lt;servername&gt;/&lt;warfilename&gt;/</code>, substituting servername and warfilename to the appropriate values, such as http://localhost:8080/helloworld/.</p>
+<div class="highlight"><pre><code class="language-xml" data-lang="xml"><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
+<span class="cp">&lt;!DOCTYPE web-app</span>
+<span class="cp">      PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;</span>
+<span class="cp">      &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot;&gt;</span>
+
+<span class="nt">&lt;web-app&gt;</span>
+    <span class="nt">&lt;display-name&gt;</span>Wicket Examples<span class="nt">&lt;/display-name&gt;</span>
+    <span class="nt">&lt;filter&gt;</span>
+        <span class="nt">&lt;filter-name&gt;</span>HelloWorldApplication<span class="nt">&lt;/filter-name&gt;</span>
+        <span class="nt">&lt;filter-class&gt;</span>org.apache.wicket.protocol.http.WicketFilter<span class="nt">&lt;/filter-class&gt;</span>
+        <span class="nt">&lt;init-param&gt;</span>
+          <span class="nt">&lt;param-name&gt;</span>applicationClassName<span class="nt">&lt;/param-name&gt;</span>
+          <span class="nt">&lt;param-value&gt;</span>org.apache.wicket.examples.helloworld.HelloWorldApplication<span class="nt">&lt;/param-value&gt;</span>
+        <span class="nt">&lt;/init-param&gt;</span>
+    <span class="nt">&lt;/filter&gt;</span>
+    <span class="nt">&lt;filter-mapping&gt;</span>
+        <span class="nt">&lt;filter-name&gt;</span>HelloWorldApplication<span class="nt">&lt;/filter-name&gt;</span>
+        <span class="nt">&lt;url-pattern&gt;</span>/*<span class="nt">&lt;/url-pattern&gt;</span>
+    <span class="nt">&lt;/filter-mapping&gt;</span>
+<span class="nt">&lt;/web-app&gt;</span></code></pre></div>
+
+<p>In this definition you see the Wicket filter defined, which handles all
+requests. In order to let Wicket know which application is available, only the
+applicationClassName filter parameter is needed.</p>
+
+<p>Also, notice the url-mapping to /*. The Wicket filter will only process
+requests that are Wicket requests. If a request is not Wicket related, the
+filter will pass the request on to the chain. This ensures that (static)
+resources outside the realm of the Wicket application, such as style sheets,
+JavaScript files, images and so forth will be served by the container.</p>
+
+<h2 id="ready-to-deploy">Ready to deploy</h2>
+
+<p>That’s it. No more configuration necessary! All you need to do now is to
+deploy the web application into your favorite application server. Point your
+browser to the url: <code>http://&lt;servername&gt;/&lt;warfilename&gt;/</code>, substituting
+servername and warfilename to the appropriate values, such as
+http://localhost:8080/helloworld/.</p>
+
+<p>As you can see: no superfluous XML configuration files are needed to enable a
+Wicket application. Only the markup (HTML) files, the Java class files and the
+required web.xml were needed to create this application.</p>
 
-<p>As you can see: no superfluous XML configuration files are needed to enable a Wicket application. Only the markup (HTML) files, the Java class files and the required web.xml were needed to create this application.</p>
 		</div>
         <div id="clearer"></div>
 		<div id="footer"><span>

Modified: wicket/common/site/trunk/_site/learn/examples/index.html
URL: http://svn.apache.org/viewvc/wicket/common/site/trunk/_site/learn/examples/index.html?rev=1611904&r1=1611903&r2=1611904&view=diff
==============================================================================
--- wicket/common/site/trunk/_site/learn/examples/index.html (original)
+++ wicket/common/site/trunk/_site/learn/examples/index.html Sat Jul 19 12:26:11 2014
@@ -187,25 +187,31 @@
 
 		<div id="contentbody">
 			<h1>A Quick Tour of Wicket</h1>
-			<p>Nothing says more about a development technology than a few simple examples. After all, how hard should it be to do something easy? The examples below should speak for themselves in demonstrating how easy it is to get things done in Wicket when compared to other frameworks. You will discover that Wicket’s component-oriented structure and its “low touch” approach to HTML is quite inviting.</p>
+			<p>Nothing says more about a development technology than a few simple examples.
+After all, how hard should it be to do something easy? The examples below
+should speak for themselves in demonstrating how easy it is to get things done
+in Wicket when compared to other frameworks. You will discover that Wicket’s
+component-oriented structure and its “low touch” approach to HTML is quite
+inviting.</p>
 
-<p>You can see these examples and many more in <a href="http://www.wicket-library.com/wicket-examples-6.0.x">live action</a> without having to install anything.</p>
+<p>You can see these examples and many more in <a href="http://www.wicket-library.com/wicket-examples-6.0.x">live
+action</a> without having to install anything.</p>
 
 <ul>
-<li><a href="helloworld.html">Hello World!</a> - Everybody’s favorite example</li>
-
-<li><a href="navomatic.html">Navomatic</a> - Automatic navigation using Borders and Links</li>
-
-<li><a href="guestbook.html">GuestBook</a> - A tiny blogger demonstrating ListViews and Forms</li>
-
-<li><a href="dropdownchoice.html">Using DropDownChoice</a> - A short example explaining the DropDownChoice component</li>
-
-<li><a href="markupinheritance.html">Markup Inheritance</a> - A short example explaining markup inheritance</li>
-
-<li><a href="ajaxcounter.html">Ajax Counter</a> - A short example explaining Wicket’s Ajax features building a counter.</li>
-
-<li><a href="usingfragments.html">Using Fragments</a> - A short example explaining Wicket’s fragments feature. Fragments are a type of inline panels.</li>
+  <li><a href="helloworld.html">Hello World!</a> - Everybody’s favorite example</li>
+  <li><a href="navomatic.html">Navomatic</a> - Automatic navigation using Borders and Links</li>
+  <li><a href="guestbook.html">GuestBook</a> - A tiny blogger demonstrating ListViews and
+Forms</li>
+  <li><a href="dropdownchoice.html">Using DropDownChoice</a> - A short example explaining the
+DropDownChoice component</li>
+  <li><a href="markupinheritance.html">Markup Inheritance</a> - A short example explaining
+markup inheritance</li>
+  <li><a href="ajaxcounter.html">Ajax Counter</a> - A short example explaining Wicket’s Ajax
+features building a counter.</li>
+  <li><a href="usingfragments.html">Using Fragments</a> - A short example explaining Wicket’s
+fragments feature. Fragments are a type of inline panels.</li>
 </ul>
+
 		</div>
         <div id="clearer"></div>
 		<div id="footer"><span>