<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Wicket  Web Spiders</title>
	<atom:link href="http://wicket.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://wicket.wordpress.com</link>
	<description>Web development in an easy way..............</description>
	<lastBuildDate>Mon, 27 Jun 2011 15:33:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='wicket.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/82c5f2caab4cfe09fdb23e313d54d81b?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Wicket  Web Spiders</title>
		<link>http://wicket.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://wicket.wordpress.com/osd.xml" title="Wicket  Web Spiders" />
	<atom:link rel='hub' href='http://wicket.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Wicket FAQ</title>
		<link>http://wicket.wordpress.com/2010/04/30/wicket-faq/</link>
		<comments>http://wicket.wordpress.com/2010/04/30/wicket-faq/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 04:52:50 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>
		<category><![CDATA[faq]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/?p=117</guid>
		<description><![CDATA[you can find frequently asked questions here wicketfaq.wordpress.com<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=117&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>you can find frequently asked questions here</p>
<p><a class="aligncenter" title="Wicket FAQ" href="http://wicketfaq.wordpress.com" target="_blank">wicketfaq.wordpress.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/117/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/117/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/117/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=117&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2010/04/30/wicket-faq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>Template for Building Authenticated WebApplication</title>
		<link>http://wicket.wordpress.com/2010/01/08/template-for-building-authenticated-webapplication/</link>
		<comments>http://wicket.wordpress.com/2010/01/08/template-for-building-authenticated-webapplication/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 02:46:36 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>
		<category><![CDATA[Authenticated web Application]]></category>
		<category><![CDATA[AuthenticatedwebApplication]]></category>
		<category><![CDATA[AuthenticatedWebSession]]></category>
		<category><![CDATA[Authentication for Web Applications]]></category>
		<category><![CDATA[Authentication in wicket]]></category>
		<category><![CDATA[author roles in wicket]]></category>
		<category><![CDATA[Authorization in wicket]]></category>
		<category><![CDATA[boilerplate for AuthenticatedWebapplications]]></category>
		<category><![CDATA[container based authentication]]></category>
		<category><![CDATA[Create AuthenticatedWebapplication with wicket]]></category>
		<category><![CDATA[Create AuthenticatedWebapplications]]></category>
		<category><![CDATA[Create or extend Web applications]]></category>
		<category><![CDATA[Create Webapplications with wicket]]></category>
		<category><![CDATA[easiest way to give security]]></category>
		<category><![CDATA[Example for wicket application]]></category>
		<category><![CDATA[first step of wicket]]></category>
		<category><![CDATA[handling roles in wicket]]></category>
		<category><![CDATA[model for webapplication]]></category>
		<category><![CDATA[new to wicket]]></category>
		<category><![CDATA[Secure a Web application]]></category>
		<category><![CDATA[security in wicket]]></category>
		<category><![CDATA[Template for Building Authenticatedwebapplication]]></category>
		<category><![CDATA[template for wicket Author roles]]></category>
		<category><![CDATA[template for wiclet application]]></category>
		<category><![CDATA[teplate for wicket Authorization]]></category>
		<category><![CDATA[what is wicket]]></category>
		<category><![CDATA[wicket authenticated web application]]></category>
		<category><![CDATA[wicket Authentication]]></category>
		<category><![CDATA[wicket Author roles]]></category>
		<category><![CDATA[wicket Authorization]]></category>
		<category><![CDATA[wicket beginers]]></category>
		<category><![CDATA[wicket security]]></category>
		<category><![CDATA[wicket source code]]></category>
		<category><![CDATA[wicket webapplication]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2010/01/08/template-for-building-authenticated-webapplication/</guid>
		<description><![CDATA[Here is the Role based Authenticated template for the wicket developer those who are in a hurry the structure  of  the Netbeans application is as follows This article illustrates Wicket&#8217;s approach to testability, authentication and authorization, form handling, page nesting, file uploads with progress feedback, and the classic back-button problem. Throughout the development steps, the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=83&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here is the Role based Authenticated template for the wicket developer those who are in a hurry</p>
<p>the structure  of  the Netbeans application is as follows</p>
<p><a href="http://wicket.files.wordpress.com/2010/01/authenticatedwebapplication1.jpg"><img class="size-medium wp-image-86 alignleft" title="AuthenticatedWebApplication" src="http://wicket.files.wordpress.com/2010/01/authenticatedwebapplication1.jpg?w=159&#038;h=300" alt="" width="159" height="300" /></a>This article illustrates Wicket&#8217;s approach to testability, authentication and authorization, form handling, page nesting, file uploads with progress feedback, and the classic back-button problem. Throughout the development steps, the example highlights noteworthy pieces of code and describes what&#8217;s going on behind the scenes.<br />
<strong>Step 1: Enforcing Page Authorization</strong><br />
Wicket&#8217;s unique WicketTester class isolates applications in simulated servlet containers, and provides high-level methods for interacting with them. This enables test-driven design with functional tests such as the following, which specifies that anonymous users should be sent to the LoginPage:</p>
<p><code><br />
@Test<br />
<strong>public void</strong> shouldAuthChallenge()<br />
{<br />
wicketTester.startPage(FileInfoPage.<strong>class</strong>);<br />
wicketTester.assertRenderedPage(LoginPage.<strong>class</strong>);<br />
}</code><br />
To establish authorization and authentication, the application class must extend AuthenticatedWebApplication, specify a login page, and use a WebSession derived from AuthenticatedWebSession as follows:</p>
<pre><code>
<strong>public class</strong> ExampleWicketApplication <strong>extends</strong> AuthenticatedWebApplication
{
  @Override
  <strong>protected</strong> Class&lt;? <strong>extends</strong> WebPage&gt; getSignInPageClass()
  {
    <strong>return</strong> LoginPage.<strong>class</strong>;
  }

  @Override
  <strong>protected</strong> Class&lt;? <strong>extends</strong> AuthenticatedWebSession&gt; getWebSessionClass()
  {
    <strong>return</strong> ExampleWebSession.<strong>class</strong>;
  }

...
</code></pre>
<p>Sessions have many responsibilities in Wicket; they aren&#8217;t simply generic containers for persistent variables as in other frameworks. In this case, ExampleWebSession implements the means of</p>
<p>authentication (more on the role of sessions later). The following code adds authorization protection to the FileInfoPage:</p>
<pre><code>
@AuthorizeInstantiation("USER")
<strong>public class</strong> FileInfoPage <strong>extends</strong> BasePage
{

...
</code></pre>
<p>The shouldAuthChallenge test now passes, and you&#8217;re ready to implement authentication.</p>
<p><strong>Step 2: Enabling Authentication</strong></p>
<p>Now that users are being sent to the LoginPage, you can test to assure that they are able to log in as a guest and get forwarded to the FileInfoPage:</p>
<pre><code>  @Test
  <strong>public void</strong> shouldAllowGuestAuth()
  {
    wicketTester.startPage(FileInfoPage.<strong>class</strong>);
    wicketTester.assertRenderedPage(LoginPage.<strong>class</strong>);

    FormTester formTester
      = wicketTester.newFormTester("signInPanel:signInForm");
    formTester.setValue("username", "guest");
    formTester.setValue("password", "guest");
    formTester.submit();

    wicketTester.assertRenderedPage(FileInfoPage.<strong>class</strong>);
  }
</code></pre>
<p>This test takes a bit of research. You need to look into the markup of the stock SignInPanel component to determine the ID of the form (&#8220;signInForm&#8221;) and its input IDs (&#8220;username&#8221; and &#8220;password&#8221;). Luckily this is simple to do using your IDE&#8217;s package explorer. You may have noticed that having markup in disparate locations like this could break separation of concerns. Wicket brings together LoginPage.java and LoginPage.html when rendering the LoginPage.</p>
<p>One simple link exists between the two: the wicket:id HTML attribute, which anchors components at specific locations on the page:</p>
<pre><code>
<strong>public class</strong> LoginPage <strong>extends</strong> BasePage
{
  <strong>public</strong> LoginPage()
  {
    add(<strong>new</strong> SignInPanel("signInPanel"));
  }
}

</code>
&lt;body&gt;

&lt;wicket:extend&gt;

&lt;div wicket:id="signInPanel"/&gt;

&lt;/wicket:extend&gt;

&lt;/body&gt;

The string signInPanel, which places the SignInPanel inside a div in the markup, is one of the only points where you lose type
safety in Wicket applications. Luckily, WicketTester helps you catch typos in an automated fashion, and the framework provides detailed
debugging output when components in the code don't match up to those specified in the markup.

Next, you implement authentication and authorization inside ExampleWebSession:
<pre><code>
  @Override
  <strong>public boolean</strong> authenticate(String userName, String password)
  {
    <strong>boolean</strong> success = userName.equals("guest") &amp;&amp; password.equals("guest");

    <strong>if</strong> ( success )
      <strong>this</strong>.userName = userName;

    <strong>return</strong> success;
  }

  @Override
  <strong>public</strong> Roles getRoles()
  {
    Roles roles = <strong>new</strong> Roles();

    <strong>if</strong> ( isSignedIn() )
      roles.add("USER");

    <strong>return</strong> roles;
  }
</code></pre>
<p>This example permits guests to authenticate, and it authorizes them to instantiate the FileInfo page via the USER role. Wicket automatically forwards guests to the</p>
<p>original destination, and the "shouldAllowGuestAuth" test now passes.<br />
<strong>Step 3: Markup Nesting Through Inheritance</strong></p>
<p>Going back to the markup for LoginPage for a second, did you notice the "wicket:extend" tags? This is Wicket's object-oriented approach to markup nesting. In this case, the BasePage</p>
<p>contains the following markup, which acts as a header and footer for all pages that extend it:<br />
&lt;body&gt;</p>
<p>&lt;h1&gt;FileDropoff&lt;/h1&gt;<br />
&lt;wicket:child/&gt;</p>
<p>&lt;p&gt;<br />
&lt;small&gt;Wicket Authenticated web Application example&lt;/small&gt;</p>
<p>&lt;/p&gt;<br />
&lt;/body&gt;<br />
<strong>Step 4: Form Handling, Component Style</strong></p>
<p>Now that users can reach the FileInfoPage, you specify that they should be able to enter some info and advance to the upload page:</p>
<pre><code>  @Test
  <strong>public void</strong> shouldAcceptInfoAndAdvance()
  {
    shouldAllowGuestAuth();
    FormTester formTester = wicketTester.newFormTester("metaDataForm");
    formTester.setValue("title", "Alpine Lakes Trail");
    formTester.setValue("tags", "hike, forest, alpine lakes");
    formTester.submit();

    wicketTester.assertRenderedPage(FileUploadPage.<strong>class</strong>);
  }
</code></pre>
<p>Now you will implement a component of your own: a simple form. Creating reusable components in Wicket is as simple as writing a small Java class that derives from the framework:</p>
<pre><code><strong>public class</strong> FileInfoPage <strong>extends</strong> BasePage
{
  <strong>private class</strong> FileInfoForm <strong>extends</strong> Form
  {

...
</code></pre>
<p>You will need a constructor that accepts a markup ID like SignInPanel does:</p>
<pre><code>    <strong>public</strong> FileInfoForm(String id)
    {
      <strong>super</strong>(id);

      setModel(<strong>new</strong> CompoundPropertyModel(<strong>new</strong> UserContributedFile()));

      add(<strong>new</strong> RequiredTextField("title")
        .add(StringValidator.maximumLength(32)));
      add(<strong>new</strong> TextField("tags")
        .add(StringValidator.maximumLength(32)));
    }
</code></pre>
<p>Components have backing model objects that generally wrap instances of entity classes (note the call to setModel above). This example has one such class, UserContributedFile,the</p>
<p>properties of which the form will allow users to edit. Different types of models facilitate different behaviors for things such as serialization and data access—in this case</p>
<p>CompoundPropertyModel is the simplest choice. wicket expresses field validation rules as objects. You can see the composite pattern in use above, as you added text fields to your</p>
<p>form and then validators to your text fields in chain invocation fashion. You can also imagine how Wicket will use the visitor pattern later to spider the fields and apply the</p>
<p>validators on submission.<br />
<strong>Wicket's Event-Driven Model and PageMap</strong></p>
<p>In keeping with the use case, it's time to move on to FileUploadPage. Override the default onSubmit method in Form:</p>
<pre><code>    @Override
    <strong>protected void</strong> onSubmit()
    {
      <strong>super</strong>.onSubmit();

      FileUploadPage fileUploadPage = <strong>new</strong> FileUploadPage(getModel());
      setResponsePage(fileUploadPage);
    }
</code></pre>
</pre>
<p>Wicket&#8217;s event-driven, unmanaged nature is clear here; whatever page you add a FileInfoForm to, submitting that instance of FileInfoForm executes the event handler and sends the user to a newly constructed FileUploadPage. The model object is already populated with validated values at this point, and you pass it to the next page&#8217;s constructor. This is a departure from other frameworks, which often use the session to marshal objects from one page to the next. Wicket maintains a server-side cache of the object graphs that represent each page rendered to the user. This makes your application a true state machine, and effectively solves the classic back button problem. For example, after advancing to the FileUploadPage, the user can hit the back button and Wicket will deserialize and render a copy of the object that represents the FileInfoPage the user was just on. The FileInfoForm&#8217;s model is part of the object graph of the page, and so Wicket deserializes it and binds it to the form with all the values last submitted by the user intact. This is a much more effective way to manage moving back and forth in multipage workflows than juggling session variables.</p>
<p><strong>File Upload with AJAX Progress Feedback</strong></p>
<p>The &#8220;shouldAcceptInfoAndAdvance&#8221; test now passes, and users can get as far as the FileUploadPage. The last step is for them to be able to upload their files, which you specify with the following test:</p>
<pre><code>  @Test
  <strong>public void</strong> shouldAcceptFileUpload()
  {
    shouldAcceptMetaAndAdvance();

    FormTester formTester = wicketTester.newFormTester("fileUploadForm");
    formTester.setFile("fileInput", TEST_UPLOAD_FILE, "image/jpeg");
    formTester.submit();

    String uploadedFilePath = TEST_UPLOAD_FOLDER.getAbsolutePath()
      .concat( File.separator )
      .concat("guest.jpg");

    java.io.File uploadedFile = <strong>new</strong> java.io.File(uploadedFilePath);

    Assert.assertTrue
      ("File not deposited in upload folder or incorrectly named.",
          uploadedFile.exists());

    uploadedFile.delete();
  }
}
</code></pre>
<p>Now you implement your second Form component: FileUploadForm. You can read the onSubmit event handler later, but for now take a closer look at the constructor and Wicket&#8217;s AJAX support:</p>
<pre><code>
<strong>public class</strong> FileUploadPage <strong>extends</strong> BasePage
{
  <strong>private class</strong> FileUploadForm <strong>extends</strong> Form
  {
    <strong>private</strong> FileUploadField fileUploadField;

    <strong>public</strong> FileUploadForm(String id)
    {
      <strong>super</strong>(id);

      setOutputMarkupId(<strong>true</strong>);

      setMultiPart(<strong>true</strong>);
      setMaxSize(Bytes.megabytes(3));

      add(fileUploadField = <strong>new</strong> FileUploadField("fileInput"));
      add(<strong>new</strong> UploadProgressBar("progress", <strong>this</strong>));
    }

<strong><span style="text-decoration:underline;">Source code for all the above structured figure</span>

<span style="color:#800000;"><em>web.xml</em></span>
</strong></code>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;

&lt;display-name&gt;wicketexample&lt;/display-name&gt;

&lt;filter&gt;

&lt;filter-name&gt;wicketexample&lt;/filter-name&gt;

&lt;filter-class&gt;org.apache.wicket.protocol.http.WicketFilter&lt;/filter-class&gt;

&lt;init-param&gt;

&lt;param-name&gt;applicationClassName&lt;/param-name&gt;

&lt;param-value&gt;com.pons.ExampleWicketApplication&lt;/param-value&gt;

&lt;/init-param&gt;

&lt;/filter&gt;

&lt;filter-mapping&gt;

&lt;filter-name&gt;wicketexample&lt;/filter-name&gt;

&lt;url-pattern&gt;/*&lt;/url-pattern&gt;

&lt;/filter-mapping&gt;

&lt;/web-app&gt;
<span style="color:#800000;"><strong><em>
BasePage.html</em></strong></span>

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"

xmlns:wicket="http://wicket.sourceforge.net/"&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

&lt;title&gt;Insert title here&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;h1&gt;FileDropoff&lt;/h1&gt;

&lt;wicket:child/&gt;

&lt;p&gt;

&lt;small&gt;wicket Authenticated web application&lt;/small&gt;

&lt;/p&gt;

&lt;/body&gt;

&lt;/html&gt;
<strong><em><span style="color:#800000;">BasePage.java</span></em></strong>

package com.pons;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.model.IModel;

public class BasePage extends WebPage
{
 public BasePage()
 {
 super();
 }

 public BasePage(IModel model)
 {
 super(model);
 }
}

<span style="color:#800000;"><em><strong>ExampleWebSession.java</strong></em></span>
package com.pons;

import org.apache.wicket.Request;
import org.apache.wicket.authentication.AuthenticatedWebApplication;
import org.apache.wicket.authentication.AuthenticatedWebSession;
import org.apache.wicket.authorization.strategies.role.Roles;

public class ExampleWebSession extends AuthenticatedWebSession
{
 private String userName;

 public ExampleWebSession(AuthenticatedWebApplication application, Request request)
 {
 super(application, request);
 }

 @Override
 public boolean authenticate(String userName, String password)
 {
 boolean success = userName.equals("guest") &amp;&amp; password.equals("guest");

 if ( success )
 this.userName = userName;

 return success;
 }

 @Override
 public Roles getRoles()
 {
 Roles roles = new Roles();

 if ( isSignedIn() )
 roles.add("USER");

 return roles;
 }

 public String getUserName()
 {
 return userName;
 }
}

<span style="color:#800000;"><em><strong>ExampleWicketApplication.java</strong></em></span>

package com.pons;

import java.io.File;

import javax.servlet.http.HttpServletRequest;

import org.apache.wicket.authentication.AuthenticatedWebApplication;
import org.apache.wicket.authentication.AuthenticatedWebSession;
import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadWebRequest;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.protocol.http.WebRequest;

/**
 * Application object for your web application. If you want to run this
 * application without deploying, run the Start class.
 */
public class ExampleWicketApplication extends AuthenticatedWebApplication
{    
 private File uploadFolder;

 /**
 * Constructor
 */
 public ExampleWicketApplication()
 {
 }

 @Override
 protected Class&lt;? extends WebPage&gt; getSignInPageClass()
 {
 return LoginPage.class;
 }

 @Override
 protected Class&lt;? extends AuthenticatedWebSession&gt; getWebSessionClass()
 {
 return ExampleWebSession.class;
 }

 public Class getHomePage()
 {
 return FileInfoPage.class;
 }

 /**
 * @return the uploadFolder
 */
 public File getUploadFolder()
 {
 return uploadFolder == null ? new File(".") : uploadFolder;
 }

 @Override
 protected WebRequest newWebRequest(HttpServletRequest servletRequest)
 {
 return new UploadWebRequest(servletRequest);
 }

 /**
 * @param uploadFolder the uploadFolder to set
 */
 public void setUploadFolder(File uploadFolder)
 {
 this.uploadFolder = uploadFolder;
 }
}

<span style="color:#800000;"><em><strong>FileInfoPage.html</strong></em></span>

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

&lt;title&gt;Enter File Info&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;wicket:extend&gt;

&lt;form wicket:id="metaDataForm"&gt;

&lt;fieldset&gt;

&lt;p&gt;

&lt;label for="title"&gt;Title:&lt;/label&gt;

&lt;input wicket:id="title" type="text"/&gt;

&lt;/p&gt;

&lt;p&gt;

&lt;label for="tags"&gt;Tags:&lt;/label&gt;

&lt;input wicket:id="tags" type="text"/&gt;

&lt;/p&gt;

&lt;input type="submit" value="Continue"/&gt;

&lt;/fieldset&gt;

&lt;/form&gt;

&lt;/wicket:extend&gt;

&lt;/body&gt;

&lt;/html&gt;

<span style="color:#800000;"><em><strong>FileInfoPage.java</strong></em></span>
package com.pons;

import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.validation.validator.StringValidator;

@AuthorizeInstantiation("USER")
public class FileInfoPage extends BasePage
{
 public FileInfoPage()
 {
 super();

 add(new FileInfoForm("metaDataForm"));
 }

 private class FileInfoForm extends Form
 {
 public FileInfoForm(String id)
 {
 super(id);

 setModel(new CompoundPropertyModel(new UserContributedFile()));

 add(new RequiredTextField("title")
 .add(StringValidator.maximumLength(32)));
 add(new TextField("tags")
 .add(StringValidator.maximumLength(32)));
 }

 @Override
 protected void onSubmit()
 {
 super.onSubmit();

 FileUploadPage fileUploadPage = new FileUploadPage(getModel());
 setResponsePage(fileUploadPage);
 }
 }
}

<span style="color:#800000;"><em><strong>FileUploadPage.html</strong></em></span>

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

&lt;title&gt;Enter File Info&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;wicket:extend&gt;

&lt;form wicket:id="fileUploadForm"&gt;

&lt;fieldset&gt;

&lt;input wicket:id="fileInput" type="file"/&gt;

&lt;input type="submit" value="Upload"/&gt;

&lt;span wicket:id="progress"&gt;&lt;/span&gt;

&lt;/fieldset&gt;

&lt;/form&gt;

&lt;/wicket:extend&gt;

&lt;/body&gt;

&lt;/html&gt;

<span style="color:#800000;"><em><strong>FileUploadPage.java</strong></em></span>

package com.pons;

import java.io.File;
import java.io.IOException;

import org.apache.wicket.authentication.AuthenticatedWebApplication;
import org.apache.wicket.authentication.AuthenticatedWebSession;
import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.lang.Bytes;

public class FileUploadPage extends BasePage
{
 // user-File_Title-tag1+tag2+tag_3.ext
 private static final String FILENAME_FORMAT = "%s-%s-%s.%s";

 public FileUploadPage(IModel userContributedFileModel)
 {
 super(userContributedFileModel);
 add(new FileUploadForm("fileUploadForm"));
 }

 private class FileUploadForm extends Form
 {
 private FileUploadField fileUploadField;

 public FileUploadForm(String id)
 {
 super(id);

 setOutputMarkupId(true);

 setMultiPart(true);
 setMaxSize(Bytes.gigabytes(1));

 add(fileUploadField = new FileUploadField("fileInput"));
 add(new UploadProgressBar("progress", this));
 }

 @Override
 protected void onSubmit()
 {
 super.onSubmit();

 final FileUpload upload = fileUploadField.getFileUpload();

 if ( upload == null )
 return;

 File tempFile;
 try {
 tempFile = upload.writeToTempFile();
 }
 catch ( IOException e ) {
 throw new RuntimeException("Unable to write file upload.", e);
 }

 File uploadFolder
 = ((ExampleWicketApplication) getApplication()).getUploadFolder();

 String userName
 = ((ExampleWebSession) getSession()).getUserName();

 UserContributedFile userContributedFile
 = (UserContributedFile) getPage().getModelObject();

 String remoteFileName = upload.getClientFileName();

 String destinationFileName = String.format(FILENAME_FORMAT, userName,
 userContributedFile.getTitle(),
 userContributedFile.getTagsUsingDelimiter('+'),
 remoteFileName.substring(remoteFileName.lastIndexOf('.') + 1));

 tempFile.renameTo(new File(uploadFolder.getAbsolutePath()
 .concat( File.separator )
 .concat(destinationFileName)));
 }
 }
}

<span style="color:#800000;"><em><strong>LoginPage.html</strong></em></span>

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"

xmlns:wicket="http://wicket.sourceforge.net/"&gt;

&lt;head&gt;

&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;

&lt;title&gt; Log In&lt;/title&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;wicket:extend&gt;

&lt;div wicket:id="signInPanel"/&gt;

&lt;/wicket:extend&gt;

&lt;/body&gt;

&lt;/html&gt;

<span style="color:#800000;"><em><strong>LoginPage.java</strong></em></span>

package com.pons;

import org.apache.wicket.authentication.panel.SignInPanel;
import org.apache.wicket.markup.html.WebPage;

public class LoginPage extends BasePage
{
 public LoginPage()
 {
 add(new SignInPanel("signInPanel"));
 }
}

<span style="color:#800000;"><em><strong>LogoutPage.java</strong></em></span>

package com.pons;

public class LogoutPage
{

}

<span style="color:#800000;"><em><strong>UserContributedFile.java</strong></em></span>

package com.pons;

import java.io.File;
import java.io.Serializable;
import java.util.StringTokenizer;

import org.apache.commons.lang.StringUtils;

public class UserContributedFile
 implements Serializable
{
 private String title;
 private String[] tags;
 private File file;

 /**
 * @return the title
 */
 public String getTitle()
 {
 return title;
 }
 /**
 * @param title the title to set
 */
 public void setTitle(String title)
 {
 this.title = title;
 }

 /**
 * @return the tags
 */
 public String getTags()
 {
 return StringUtils.join(tags, ", ");
 }

 /**
 * @return the tags
 */
 public String getTagsUsingDelimiter(char delimiter)
 {
 return StringUtils.join(tags, delimiter);
 }

 /**
 * Set tags using a comma and whitespace separated list.
 *
 * @param tags
 */
 public void setTags(String tags)
 {
 this.tags = StringUtils.splitByWholeSeparator(tags, ", ");
 }

 /**
 * @return the file
 */
 public File getFile()
 {
 return file;
 }
 /**
 * @param file the file to set
 */
 public void setFile(File file)
 {
 this.file = file;
 }
}
<h4><strong>Inside Test Package</strong></h4>

<span style="color:#800000;"><em><strong>Start.java</strong></em></span> (this ensures the starting of embedded Jetty server)

package com.pons;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.bio.SocketConnector;
import org.mortbay.jetty.webapp.WebAppContext;

public class Start {

 public static void main(String[] args) throws Exception {
 Server server = new Server();
 SocketConnector connector = new SocketConnector();
 connector.setPort(8085);
 server.setConnectors(new Connector[] { connector });

 WebAppContext bb = new WebAppContext();
 bb.setServer(server);
 bb.setContextPath("/wicketexample");
 bb.setWar("src/main/webapp");

 server.addHandler(bb);

 try {
 System.out.println("&gt;&gt;&gt; STARTING , PRESS ANY KEY TO STOP");
 server.start();
 while (System.in.available() == 0) {
 Thread.sleep(5000);
 }
 server.stop();
 server.join();
 } catch (Exception e) {
 e.printStackTrace();
 System.exit(100);
 }
 }
}

<span style="color:#800000;"><em><strong>WicketApplicationTest.java</strong></em></span>
package com.pons;

import com.pons.LoginPage;
import com.pons.FileInfoPage;
import com.pons.FileUploadPage;
import com.pons.ExampleWicketApplication;
import junit.framework.Assert;

import org.apache.wicket.util.file.File;
import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTester;
import org.junit.Before;
import org.junit.Test;

public class WicketApplicationTest
{
 private ExampleWicketApplication testApplicaton;
 private WicketTester wicketTester;

 private static File TEST_UPLOAD_FILE = new File("test-upload-image.jpg");
 private static java.io.File TEST_UPLOAD_FOLDER
 = new java.io.File("test-upload-folder");

 @Before
 public void setUpTestApplication()
 {
 if ( ! TEST_UPLOAD_FOLDER.exists() )
 TEST_UPLOAD_FOLDER.mkdir();

 testApplicaton = new ExampleWicketApplication();
 testApplicaton.setUploadFolder(TEST_UPLOAD_FOLDER);

 wicketTester = new WicketTester(testApplicaton);
 }

 @Test
 public void shouldAuthChallenge()
 {
 wicketTester.startPage(FileInfoPage.class);
 wicketTester.assertRenderedPage(LoginPage.class);
 }

 @Test
 public void shouldAllowGuestAuth()
 {
 wicketTester.startPage(FileInfoPage.class);
 wicketTester.assertRenderedPage(LoginPage.class);

 FormTester formTester = wicketTester.newFormTester("signInPanel:signInForm");
 formTester.setValue("username", "guest");
 formTester.setValue("password", "guest");
 formTester.submit();

 wicketTester.assertRenderedPage(FileInfoPage.class);
 }

 @Test
 public void shouldAcceptInfoAndAdvance()
 {
 shouldAllowGuestAuth();

 FormTester formTester = wicketTester.newFormTester("metaDataForm");
 formTester.setValue("title", "Testing");
 formTester.setValue("tags", "wood, forest,lakes");
 formTester.submit();

 wicketTester.assertRenderedPage(FileUploadPage.class);
 }

 @Test
 public void shouldAcceptFileUpload()
 {
 shouldAcceptInfoAndAdvance();

 FormTester formTester = wicketTester.newFormTester("fileUploadForm");
 formTester.setFile("fileInput", TEST_UPLOAD_FILE, "image/jpeg");
 formTester.submit();

 // for simplicity we store the previously collected meta information in
 // the file name.
 String uploadedFilePath = TEST_UPLOAD_FOLDER.getAbsolutePath()
 .concat( File.separator )
 .concat("lakes.jpg");

 java.io.File uploadedFile = new java.io.File(uploadedFilePath);

 Assert.assertTrue
 ("File not deposited in upload folder or incorrectly named.",
 uploadedFile.exists());

 uploadedFile.delete();
 }
}

<span style="color:#800000;"><em><strong>Maven based pom.xml file</strong></em></span>

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;

 &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
 &lt;groupId&gt;com.pons&lt;/groupId&gt;
 &lt;artifactId&gt;wicketexample&lt;/artifactId&gt;
 &lt;packaging&gt;war&lt;/packaging&gt;
 &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
 &lt;name&gt;Example Wicket Application&lt;/name&gt;

 &lt;!-- TODO
 &lt;organization&gt;
 &lt;name&gt;company name&lt;/name&gt;
 &lt;url&gt;company url&lt;/url&gt;
 &lt;/organization&gt;
 --&gt;

 &lt;licenses&gt;
 &lt;license&gt;
 &lt;name&gt;The Apache Software License, Version 2.0&lt;/name&gt;
 &lt;url&gt;http://www.apache.org/licenses/LICENSE-2.0.txt&lt;/url&gt;
 &lt;distribution&gt;repo&lt;/distribution&gt;
 &lt;/license&gt;
 &lt;/licenses&gt;

 &lt;dependencies&gt;
 &lt;!--  WICKET DEPENDENCIES --&gt;

 &lt;dependency&gt;
 &lt;groupId&gt;org.apache.wicket&lt;/groupId&gt;
 &lt;artifactId&gt;wicket&lt;/artifactId&gt;
 &lt;version&gt;${wicket.version}&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;org.apache.wicket&lt;/groupId&gt;
 &lt;artifactId&gt;wicket-auth-roles&lt;/artifactId&gt;
 &lt;version&gt;${wicket.version}&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;org.apache.wicket&lt;/groupId&gt;
 &lt;artifactId&gt;wicket-extensions&lt;/artifactId&gt;
 &lt;version&gt;${wicket.version}&lt;/version&gt;
 &lt;/dependency&gt;

 &lt;!-- LOGGING DEPENDENCIES - LOG4J --&gt;

 &lt;dependency&gt;
 &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
 &lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;
 &lt;version&gt;1.0.1&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;log4j&lt;/groupId&gt;
 &lt;artifactId&gt;log4j&lt;/artifactId&gt;
 &lt;version&gt;1.2.14&lt;/version&gt;
 &lt;/dependency&gt;

 &lt;!--  JETTY DEPENDENCIES FOR TESTING  --&gt;

 &lt;dependency&gt;
 &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
 &lt;artifactId&gt;jetty&lt;/artifactId&gt;
 &lt;version&gt;${jetty.version}&lt;/version&gt;
 &lt;scope&gt;provided&lt;/scope&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
 &lt;artifactId&gt;jetty-util&lt;/artifactId&gt;
 &lt;version&gt;${jetty.version}&lt;/version&gt;
 &lt;scope&gt;provided&lt;/scope&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
 &lt;artifactId&gt;jetty-management&lt;/artifactId&gt;
 &lt;version&gt;${jetty.version}&lt;/version&gt;
 &lt;scope&gt;provided&lt;/scope&gt;
 &lt;/dependency&gt;

 &lt;dependency&gt;
 &lt;groupId&gt;junit&lt;/groupId&gt;
 &lt;artifactId&gt;junit&lt;/artifactId&gt;
 &lt;version&gt;4.3.1&lt;/version&gt;
 &lt;scope&gt;test&lt;/scope&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;commons-lang&lt;/groupId&gt;
 &lt;artifactId&gt;commons-lang&lt;/artifactId&gt;
 &lt;version&gt;2.3&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;/dependencies&gt;

 &lt;build&gt;
 &lt;resources&gt;
 &lt;resource&gt;
 &lt;directory&gt;src/main/resources&lt;/directory&gt;
 &lt;/resource&gt;
 &lt;resource&gt;
 &lt;directory&gt;src/main/java&lt;/directory&gt;
 &lt;includes&gt;
 &lt;include&gt;**&lt;/include&gt;
 &lt;/includes&gt;
 &lt;excludes&gt;
 &lt;exclude&gt;**/*.java&lt;/exclude&gt;
 &lt;/excludes&gt;
 &lt;/resource&gt;
 &lt;/resources&gt;
 &lt;testResources&gt;
 &lt;testResource&gt;
 &lt;directory&gt;src/test/java&lt;/directory&gt;
 &lt;includes&gt;
 &lt;include&gt;**&lt;/include&gt;
 &lt;/includes&gt;
 &lt;excludes&gt;
 &lt;exclude&gt;**/*.java&lt;/exclude&gt;
 &lt;/excludes&gt;
 &lt;/testResource&gt;
 &lt;/testResources&gt;
 &lt;plugins&gt;
 &lt;plugin&gt;
 &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
 &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
 &lt;version&gt;2.0&lt;/version&gt;
 &lt;configuration&gt;
 &lt;source&gt;1.5&lt;/source&gt;
 &lt;target&gt;1.5&lt;/target&gt;
 &lt;/configuration&gt;
 &lt;/plugin&gt;
 &lt;plugin&gt;
 &lt;groupId&gt;org.mortbay.jetty&lt;/groupId&gt;
 &lt;artifactId&gt;maven-jetty-plugin&lt;/artifactId&gt;
 &lt;/plugin&gt;
 &lt;/plugins&gt;
 &lt;/build&gt;

 &lt;properties&gt;
 &lt;wicket.version&gt;1.3.3&lt;/wicket.version&gt;
 &lt;netbeans.hint.deploy.server&gt;Tomcat60&lt;/netbeans.hint.deploy.server&gt;
 &lt;jetty.version&gt;6.1.4&lt;/jetty.version&gt;
 &lt;/properties&gt;

&lt;/project&gt;

﻿﻿</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=83&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2010/01/08/template-for-building-authenticated-webapplication/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>

		<media:content url="http://wicket.files.wordpress.com/2010/01/authenticatedwebapplication1.jpg?w=159" medium="image">
			<media:title type="html">AuthenticatedWebApplication</media:title>
		</media:content>
	</item>
		<item>
		<title>Why Wicket ?</title>
		<link>http://wicket.wordpress.com/2010/01/06/why-wicket/</link>
		<comments>http://wicket.wordpress.com/2010/01/06/why-wicket/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 03:46:25 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2010/01/06/why-wicket/</guid>
		<description><![CDATA[building&#8230;&#8230;&#8230;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=81&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>building&#8230;&#8230;&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/81/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/81/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/81/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=81&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2010/01/06/why-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>Seam / JSF vs Wicket</title>
		<link>http://wicket.wordpress.com/2009/12/30/seam-jsf-vs-wicket/</link>
		<comments>http://wicket.wordpress.com/2009/12/30/seam-jsf-vs-wicket/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 03:05:20 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>
		<category><![CDATA[compare frameworks]]></category>
		<category><![CDATA[compare seam and wicket frameworks]]></category>
		<category><![CDATA[compare wicket and seam frameworks]]></category>
		<category><![CDATA[comparision with seam and wicket frameworks]]></category>
		<category><![CDATA[differeciate wicket and seam]]></category>
		<category><![CDATA[differenciate seam and wicket]]></category>
		<category><![CDATA[differenciate wicket and seam frameworks]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[Seam and wicket]]></category>
		<category><![CDATA[seam vs wicket]]></category>
		<category><![CDATA[seam with wicket comparision]]></category>
		<category><![CDATA[wicket]]></category>
		<category><![CDATA[wicket and seam]]></category>
		<category><![CDATA[wicket vs seam]]></category>
		<category><![CDATA[wicket with seam comparision]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2009/12/30/seam-jsf-vs-wicket/</guid>
		<description><![CDATA[A while after Seam support for Apache Wicket was announced, I downloaded Seam and took a look at the Wicket example. Then an idea struck – how about doing a performance comparison – I mean, here was the very same application implemented in JSF and Wicket – right? So I decided to write a JMeter [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=78&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A while after Seam support for Apache Wicket was announced, I downloaded Seam and took a look at the Wicket example. Then an idea struck – how about doing a performance comparison – I mean, here was the very same application implemented in JSF and Wicket – right? So I decided to write a JMeter script for both the JSF and Wicket versions of the Seam “hotel booking” example and compare results. I started right away but very soon got tired of waiting for app-server re-starts on my trusty laptop (Jetty has really spoiled me) – and it kind of bothered me that the Seam examples were not in Maven 2 layout. Anyway, at some point I decided to re-write an “EJB-free” version of the Seam booking example using just Wicket and JPA. And use Maven and Jetty. And… one thing led to another – and what I ended up doing is this:</p>
<p>* Adapted the Seam JPA example (the one that does not use EJB) as the baseline application. Converted it into a Maven 2 WAR project which can run on Jetty.<br />
* Implemented what I hope is the exact equivalent of the above using only Wicket and JPA, also Maven-ized and Jetty-fied. Decided to also experiment with some of the ideas in this blog post.<br />
* Wrote a JMeter script for both applications taking care to exercise identical functionality.<br />
* Used an Ant script to run the JMeter scripts in batch mode (passing number of concurrent users as a parameter) and start / stop Jetty in sync.<br />
* Automated the entire cycle of running the load test for 1, 5, 10, 15 and 20 concurrent users including some code to parse the JMeter logs and generate a CSV file of tabular results.<br />
* Also included an Ant target that takes a JVM heap dump at the end of the load test – just before the users are logged out and the HTTP sessions killed.</p>
<p>I was able to re-use the official Seam Wicket example to some extent, mainly the HTML files – but the Java side is almost completely re-written. The Seam booking example covers quite a bit of ground from the framework comparison point of view – for example:</p>
<p>* Security – some pages are secured and redirect to a login page<br />
* Templating – some pages inherit from a common layout with a header / footer defined<br />
* Ajax –<br />
o hotel search results refresh as you type and a “busy” image is shown during the Ajax request<br />
o form field validations occur as soon as the field loses focus<br />
* Session scope – some state is stored and retrieved in the session<br />
* Page navigation / state –<br />
o user navigation state transparently managed by the framework<br />
o user should be able to work in multiple concurrent conversations (browser tabs)<br />
o the browser back button should work as expected<br />
* JPA – getting access to the entity manager and transaction management<br />
* Forms – binding, validation and displaying error / info feedback to the user<br />
* Hibernate Validator – annotations on the JPA entity classes are re-used for form-validation</p>
<p>Both sides use the exact same entities, persistence.xml and initial HSQLDB import. I’m using the latest Seam 2.1.1-GA and Wicket 1.3.5. Disclaimer: my Wicket code may not be ideal, and I’ve also experimented with a custom RequestCycle for JPA and tried to use inherited models as far as possible. Instructions on how you can download the source and run the scripts on your local machine are at the end of this blog post.</p>
<p>I may do some follow up blog posts on how the code compares between the Seam / JSF and Wicket implementations, and also share some tips on writing JMeter scripts and automation using Jetty, Ant etc. I’m also expecting to have to make corrections and changes to the code based on feedback. For now, I’ll summarize my observations on performance and memory usage.</p>
<p>for more quench to go comparing performance <a title="Seam Vs Wicket" href="http://ptrthomas.wordpress.com/2009/01/14/seam-jsf-vs-wicket-performance-comparison/" target="_blank">clickhere</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=78&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2009/12/30/seam-jsf-vs-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>Comparing Wicket and Tapestry</title>
		<link>http://wicket.wordpress.com/2009/12/30/comparing-wicket-and-tapestry/</link>
		<comments>http://wicket.wordpress.com/2009/12/30/comparing-wicket-and-tapestry/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 01:04:45 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>
		<category><![CDATA[Article about Wicket vs. Tapestry 5]]></category>
		<category><![CDATA[compare tapestry with wicket]]></category>
		<category><![CDATA[compare wicket with tapestry]]></category>
		<category><![CDATA[comparision between tapestry and wicket]]></category>
		<category><![CDATA[comparision between wicket and tapestry]]></category>
		<category><![CDATA[Comparison of Tapestry vs Wicket]]></category>
		<category><![CDATA[diff between wicket and tapestry]]></category>
		<category><![CDATA[Difference between Apache Tapestry and Apache Wicket]]></category>
		<category><![CDATA[difference between wicket and tapestry]]></category>
		<category><![CDATA[tapestry and wicket]]></category>
		<category><![CDATA[Tapestry and Wicket compared]]></category>
		<category><![CDATA[tapestry vs wicket]]></category>
		<category><![CDATA[wicket and tapestry]]></category>
		<category><![CDATA[wicket vs tapestry]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2009/12/30/comparing-wicket-and-tapestry/</guid>
		<description><![CDATA[Overview Both Wicket and Tapestry are component-based web application framework written in Java. Although the design approaches are very similar, some of the implementation details are quite different. Moving to Wicket from Tapestry is double-edged: on the one hand, Tapestry users are already familiar with the component-driven approach, so should have no problem understanding Wicket [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=64&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Overview</strong></p>
<p>Both Wicket and Tapestry are component-based web application framework written in Java. Although the design approaches are very similar, some of the implementation details are quite different.</p>
<p>Moving to Wicket from Tapestry is double-edged: on the one hand, Tapestry users are already familiar with the component-driven approach, so should have no problem understanding Wicket concepts. On the other hand, however, the actual coding can be very different.</p>
<p>This article is aimed at Tapestry users moving over to Wicket. The goal is to give such users a running start by showing some of the key implementation details in Wicket that differ from Tapestry.</p>
<p><strong>The Wicket Way</strong></p>
<p>This is a quote taken from the mailing list:</p>
<p style="padding-left:30px;">Although they are both component oriented frameworks, they have completely different approaches. In wicket the focus is on java code not on the template. Wicket templates are simple and limited<br />
(purposefully) whereas tapestry allows for a lot more customization from within the template. Wicket&#8217;s approach makes sure all your logic is kept in code. That is the wicket way.</p>
<p style="padding-left:1080px;">– Igor Vaynberg</p>
<p>And:</p>
<p><strong>Some of the main differences:</strong></p>
<p style="padding-left:60px;">* Wicket is not a managed framework. That means that you &#8211; the programmer &#8211; are in charge of component creation yourself. You do this with javacode opposed to doing it<br />
declarative.</p>
<p style="padding-left:60px;">Pro: gives you flexibility/ you wont be limited by what the framework builders thought up/ you don&#8217;t have to learn how the framework manages and how the declaring language (xml) works.</p>
<p style="padding-left:60px;">Con: harder to integrate with other frameworks sometimes/ wicket internals sometimes difficult.</p>
<p style="padding-left:60px;">* (like Igor said) Wicket purposefuly does not support scripting like features in your markup.</p>
<p style="padding-left:60px;">Pro: everything stays very clean and it is easier to guess how things should be done.</p>
<p style="padding-left:60px;">Con: harder for people that are used to a &#8216;php/jsp way of doing things&#8217; and you need programmers that at least understand the basics of OO Java programming.</p>
<p style="padding-left:60px;">Pro: clarity and cleaneness. Con: some things are more work with Wicket and you have to keep your java component tree in sync with the markup nesting.</p>
<p style="padding-left:60px;">* With Wicket every component is truly stateful. Every property you define is part of it&#8217;s state, and there is a flexible undo mechanism you can use to support<br />
any advanced backbutton support you might want. No need for a rewind mechanism. Furthermore, wicket component can be nested and can take part of any<br />
collaboration you want in the same fashion you could do in e.g. Swing.</p>
<p style="padding-left:60px;">Pro: flexibility and very easy to do complex things if you know your Java.</p>
<p style="padding-left:60px;">Con: sometimes easy to end up with unoptimized spaghetti like code if you take too many short cuts (much like you could have with Swing).</p>
<p style="padding-left:60px;text-align:justify;">* Creating custom components with Wicket is super easy. Just extend from an existing one (or from base class WebComponent or WebMarkupContainer), make it available<br />
in your classpath and your done. There&#8217;s no extra configuration (libraries) and magical strings (ids) involved. For advanced component initialization, you can use IInitializer.<br />
-Eelco Hillenius</p>
<p style="text-align:justify;"><strong>Coding Components</strong></p>
<p><strong>The main differences with Wicket when coding components are:</strong></p>
<p style="padding-left:60px;">* there is no XML page file<br />
* you cannot pass in parameters via HTML</p>
<p style="padding-left:60px;">Example: create a menu component</p>
<p>In this example, we will explore how to create a menu component for a website. The goal is to output HTML code such as the following:</p>
<div id="menu">
<p>&lt;p&gt;Item 1&lt;/p&gt;</p>
<p>&lt;p&gt;&lt;a href=&#8221;item2.html&#8221;&gt;Item 2&lt;/a&gt;&lt;/p&gt;</p>
<p>&lt;p&gt;&lt;a href=&#8221;item3.html&#8221;&gt;Item 3&lt;/a&gt;&lt;/p&gt;</p>
<p>&lt;p&gt;&lt;a href=&#8221;item4.html&#8221;&gt;Item 4&lt;/a&gt;&lt;/p&gt;</p>
</div>
<p>Item 1 does not contain a link since it is the &#8220;active&#8221; page. The same would occur for any one of the other links when the page corresponding to that link is &#8220;active&#8221;.</p>
<p>Note that in most cases, you would not even need to think about this since Wicket&#8217;s  component takes care of this for you. However, we will continue to use this as our example.</p>
<p>Internationalisation (i18n) is easy in Wicket, since it is supported out of the box.</p>
<p>All you need to do is create the localised page for each Page in your application. For instance:</p>
<p>Hello.java<br />
Hello.html<br />
Hello_fr.html<br />
Hello_ja.html<br />
&#8230;</p>
<p>The application will auto-detect the default language setting on the client machine and serve that locale by default. If the locale is unknown, it will default to that provided in the file with no locale specification (so in our example, &#8220;Hello.html&#8221;).</p>
<p>You can switch locales by simply adding a link to your page, such as:</p>
<p>In Hello.java:</p>
<address>add(new Link(&#8220;indian&#8221;)<br />
{<br />
public void onClick()<br />
Unknown macro: { getSession().setLocale( Locale.INDIAN ); }</address>
<address>});</address>
<p>In Hello*.html</p>
<address>&lt;a href=&#8221;#&#8221; wicket:id=&#8221;indian&#8221;&gt;Indian&lt;/a&gt;</address>
<address>
</address>
<address>
</address>
<address> </address>
<address>Tapestry and Wicket are referred  as modern  component-based Web frameworks.     Unlike the Model 2  architecture frameworks Struts or Spring MVC, Tapestry and Wicket      offer a fresh approach to the  process of Web development by emphasizing a methodology     for thinking about  Web applications, their behavior, and component interaction in the     same way you think about stand-alone GUI-based applications.A typical component-based application represents a set of pages that consist of a set   of components. The  components, in turn, may be assembled from smaller components, etc.   User interaction here is  a specific component event. This is the main difference from   MVC-based applications, where the entry  point for interactions is a servlet or an action   with general attributes (such  as URLs, its parameters, forms, etc.).Developers who use component-based frameworks focus on components and their interaction   by implementing event-driven  models. Servlets, HTTP sessions, and other entities from   the servlet API are moved one  level lower and are never used directly. However, the   developer is responsible for the  server-side state through the way a component or its   properties are declared,  which can be session-persistent.</p>
</address>
<address> </address>
<address> </address>
<address><strong>Both Tapestry and Wicket use   their own template systems  that allow creating HTML templates fully compliant with HTML   standards. This gives  us a clear separation of concerns: Web designers work on the GUI   without a concern about  what platform the application is written on; likewise,   application developers implement the components not  concerned with the final design of   pages using stub elements  for debugging and testing. Both Tapestry and Wicket support such separation.</strong></address>
<address> </address>
<address> </address>
<address> </address>
<address>While going on its way with Tapestry,  it  is heavily based on the HiveMind microkernel, which is a serious   representation of Inversion-of-Control containers. All Tapestry services are registered using HiveMind.<br />
</address>
<address>A typical Tapestry component is assembled from a component specification that is an XML   descriptor, from component logic that  is a portion of the Java™   programming language and from UI layout that is an HTML template.On the other hand the wicket works is simple component basedAt the heart of the Wicket architecture is the <em>Component</em> class, which all   components and markup containers  extend. A component is responsible for dealing with   its model — an implementation of  the <em>IModel</em> interface. The model   represents any kind of data  relevant to the component instance and defines its   behavior. One of the noticeable IModel  implementations is the   <code>LoadableDetachableModel</code> that allows passing transient  data,   loading it before rendering  the component, and detaching (destroying) it when it is not   needed anymore, thus reducing  the size of the Wicket session.</p>
<p>Wicket pages are components also, and their states are stored in the Wicket session if   they are stateful. Pages can be  version-enabled, so every time the state of a page is   changed (page is simply viewed, its  components state is changed, etc.), it is stored   with an incremented version  number.</p>
</address>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/64/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=64&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2009/12/30/comparing-wicket-and-tapestry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>Comparing wicket with struts</title>
		<link>http://wicket.wordpress.com/2009/12/30/comparing-wicket-with-struts/</link>
		<comments>http://wicket.wordpress.com/2009/12/30/comparing-wicket-with-struts/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 01:03:25 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>
		<category><![CDATA[compare struts and wicket]]></category>
		<category><![CDATA[compare wicket with struts]]></category>
		<category><![CDATA[comparision between struts and wicket]]></category>
		<category><![CDATA[comparision between wicket and struts]]></category>
		<category><![CDATA[difference between wicket and struts]]></category>
		<category><![CDATA[differnce between struts and wicket]]></category>
		<category><![CDATA[distingush between struts and wicket]]></category>
		<category><![CDATA[distungush between wicket and struts]]></category>
		<category><![CDATA[struts mvc]]></category>
		<category><![CDATA[struts vs wicket]]></category>
		<category><![CDATA[struts with wicket]]></category>
		<category><![CDATA[why wicket]]></category>
		<category><![CDATA[wicket and struts]]></category>
		<category><![CDATA[wicket Vs struts]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2009/12/30/comparing-wicket-with-struts/</guid>
		<description><![CDATA[Overview Wicket is an advanced component based web application framework. Its primary benefits are: * Clean separation of concerns between HTML and Java * Object-oriented component model * Automated state management * High productivity * Low learning curve * Abstraction away from Servlet API and HTTP protocol details * No XML configuration files * Easy [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=63&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;"><strong>Overview</strong></p>
<p style="text-align:justify;">Wicket is an advanced component based web application framework. Its primary benefits are:</p>
<p style="text-align:justify;">* Clean separation of concerns between HTML and Java<br />
* Object-oriented component model<br />
* Automated state management<br />
* High productivity<br />
* Low learning curve<br />
* Abstraction away from Servlet API and HTTP protocol details<br />
* No XML configuration files<br />
* Easy to build reusable components</p>
<p style="text-align:justify;">Struts is a Model2 MVC web application framework. It is based around action classes that handle HTTP requests. Configuration is by XML files. Struts is usually used in conjunction with another technology (usually JSP and custom tag libraries).</p>
<p style="text-align:justify;">The remainder of this article addresses the main differences between the two frameworks and explains why Wicket is so much better than Struts (in our opinion).<br />
<strong></strong></p>
<p style="text-align:justify;"><strong>General Philosophy</strong></p>
<p style="text-align:justify;">The philosophy adopted by Struts is based around intercepting each HTTP request to a web application and directing it to a specific Action class that handles the request. Each action class then returns a result that informs struts of what to do next. This could be forwarding or redirecting to another action or passing control to a JSP page in order to output HTML. This approach is now rather outdated, for the following two main reasons:</p>
<p style="text-align:justify;">* It is not particularly object-oriented. Yes, each Action class defines an abstraction, but the abstraction is determined by the HTTP procotol request mechanism rather than by an object-oriented analysis.<br />
* Unless you output HTML directly from your Java code (bad practice) you still need to learn another major technology (usually JSP plus custom tag libraries) in order to produce output HTML pages. JSP pages with custom tags are notoriously difficult to maintain and edit, especially if you want you graphic design team to do this work.</p>
<p style="text-align:justify;">Wicket&#8217;s approach is very different. It adopts a very clean object-oriented and component based approach (much more like Swing). Each page in Wicket is a collection of components (built using the Composite design pattern). Pages and components take care of rendering themselves, either directly or via an associated markup file. When HTTP requests arrive these are converted into events that are invoked on individual components. Wicket therefore solves the two main problems with the struts philosophy as follows:</p>
<p style="text-align:justify;">* Wicket is fully object-oriented. You work with hierarchies of components and design your application as such. There is no need to bend your oo design to fit with the request-response nature of the HTTP protocol.<br />
* Wicket markup files are as close to pure HTML as it is possible to get. Where Wicket does introduce content into the markup it is very clean and complies with all XHTML standards (via the wicket namespace). Anyone who knows HTML can work with and edit Wicket markup files regardless of whether they know anything other than HTML or not.</p>
<p style="text-align:justify;"><strong>HTTP Request Handling</strong></p>
<p style="text-align:justify;">In Struts, an HTTP request is received. Struts looks up the request path in its config file and finds the associated Action class. If configured it then extracts the request parameters into an ActionForm bean and performs some validation. The HTTP request, response and the ActionForm are then passed to the Action class. From this point on it is up to the action developer to control every aspect of the application. They must manually work with the HTTP session, they manipulate attributes in the HTTP request and the HTTP session, they must set up all of the information that they want to be available when the action is complete and so on. Finally they must return the appropriate ActionForward so that struts knows what to do next. If this ActionForward indicates that control should be passed to a JSP then the developer must also write the JSP, using all of the Struts custom tag libraries. This is a huge amount of work and VERY error prone due to the fact that names must be synchronized across THREE locations (the Struts XML config file, the Java Action class and the JSP custom tags). The whole thing is convoluted, error prone and inefficient.</p>
<p style="text-align:justify;">In Wicket, an HTTP request is received. Wicket identifies which page the request is for and which component on the page the request is associated with. If the request is to a form then Wicket automatically extracts the request parameters, validates them, does type conversions and sets the model values on each form component in turn. It then converts the request to an event of the appropriate type and invokes the appropriate event listener on the target component. The event handling code runs, doing whatever business logic is necessary. The event handler can then choose which page to go to next. The page is instantiated (if it does not already exist) and is told to render itself. The render process visits each component in turn and asks it to render itself. Each component may render its HTML directly or may utilise an HTML markup file. The only tie up of names is that each component name in the Java component model must be mapped to an HTML element in the markup file (via a wicket:id attribute).</p>
<p style="text-align:justify;"><strong>Reasons why the Wicket approach is much more powerful:</strong></p>
<p style="text-align:justify;">* Wicket components know how to handle their own events. Therefore, once you place a component on a page and write an event handler (usually a handful of lines), that&#8217;s it. If a page has 20 different components that can cause events you still need do no more than add them to the page. In struts you would either have to create 20 different Action classes or one class with a 20 way if/else if/else/switch statement plus do all the XML config!<br />
* Wicket allows you to think of your application in terms of reusable components and events raised against these components. No more corrupting your object-oriented design to fit with the request/response nature of the HTTP protocol.<br />
* With Wicket you write less stuff. The Java code is generally shorter than the equivalent Struts Action classes, because the reusable components have so much logic build in to them. Pure HTML with Wicket tags is much shorter and simpler than JSP with custom tag libraries. There are no XML config files in Wicket.</p>
<p style="text-align:justify;">If you have programmed with Windows API and then with Visual Basic or Borland Delphi, the following comparison may be helpful. Programming with Struts is similar to program with Windows API: receiving raw message, decoding it and doing whatever you need to do. System does not expect any return value except acknowledgment that message was received. Windows API is procedural and is based on idea of message cycle.</p>
<p style="text-align:justify;">On the other hand, Delphi hides Windows message cycle inside the TApplication class, and allows to build other classes around it. Raw system message is initially received by Delphi built-in classes, it is parsed and its recipient is determined. Then message is converted to an event and delivered to a proper object.</p>
<p style="text-align:justify;">Just like in Windows application, Wicket application has resource files, which are property files for text and HTML templates for GUI. So, in a way, Wicket for web development is what Delphi for desktop development.<br />
Servlet API &amp; HTTP Protocol Abstraction</p>
<p style="text-align:justify;">Struts does not hide the details of the Servlet API and the HTTP protocol. To use Struts you must be happy working with the HttpServletRequest, HttpServletResponse and HttpSession classes as well as the Struts Action, ActionForm, ActionMapping and ActionForward classes. You must also build your application around request/response principles as dictated by the HTTP protocol. This is an inherent weakness of all Model2 MVC web frameworks.</p>
<p style="text-align:justify;">Wicket hides all the details of the Servlet API and the HTTP protocol. For many applications you will never touch any of these details. Even for very complex applications you may only need to very occasionally use one of the Wicket protocol abstraction classes, but even this is very rare. With Wicket you are working with real Java component classes, POJO business models and pure HTML markup files.</p>
<p style="text-align:justify;"><strong>State Management</strong></p>
<p style="text-align:justify;">Struts pretty much requires that you take full control over state management. This is fine if you are building a massive, highly scalable, clustered application &#8211; you want granular control over everything in your HttpSession. However, for a small or medium sized application it means you have to write a lot of extra code for no reason whatsoever. Thus your application is more complex and takes longer to write.</p>
<p style="text-align:justify;">Wicket adopts an alternative approach. By default the Wicket framework does pretty much ALL state management for you (by remembering the Page and Component states). For small and medium applications the amount of state management code you need to write yourself will be close to zero. However, Wicket also exposes a number of APIs that allow you to take control of the standard state management and implement your own alternatives if necessary. Thus, large applications can still take full control of state management, but this is not imposed on smaller applications. In fact, even when writing a large Wicket application it is common to start out with Wicket managing all of the state and then implementing custom state management solutions as part of performance tuning.</p>
<p style="text-align:justify;"><strong>Configuration</strong></p>
<p style="text-align:justify;">Struts requires an XML file that defines all of the request and response mappings, all of the ActionForm objects and so on. This file can get very BIG and complex to maintain. Newer versions of Struts allow this file to be broken into separate modules. However, all this does is result in many slightly smaller but still just as complex XML files.</p>
<p style="text-align:justify;">Wicket has NO CONFIGURATION FILES. There is a simple application configuration class that can be initialised programatically (or via Servlet init parameters) and that is it. All details of how HTTP requests map to component events, how components output their HTML and so on is contained within the Wicket application logic. Most Wicket applications can be deployed with just a handful of entries in the web.xml file &#8211; nothing more.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=63&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2009/12/30/comparing-wicket-with-struts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>Wicket tits &#8211; helps you for beginers</title>
		<link>http://wicket.wordpress.com/2009/12/23/wicket-tits-helps-you-for-beginers/</link>
		<comments>http://wicket.wordpress.com/2009/12/23/wicket-tits-helps-you-for-beginers/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 07:32:21 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>
		<category><![CDATA[componens in wicket]]></category>
		<category><![CDATA[first step of wicket]]></category>
		<category><![CDATA[new to wicket]]></category>
		<category><![CDATA[what is wicket]]></category>
		<category><![CDATA[wicket]]></category>
		<category><![CDATA[wicket beginers]]></category>
		<category><![CDATA[wicket component]]></category>
		<category><![CDATA[wicket components]]></category>
		<category><![CDATA[wicket intrduction]]></category>
		<category><![CDATA[wicket source code]]></category>
		<category><![CDATA[wicket stuff reference]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2009/12/23/wicket-tits-helps-you-for-beginers/</guid>
		<description><![CDATA[Component serves as the highest level abstract base class for all components. Identity - All Components must have a non-null id which is retrieved by calling getId(). The id must be unique within the MarkupContainer that holds the Component, but does not have to be globally unique or unique within a Page&#8217;s component hierarchy. Hierarchy [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=53&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;"><strong>Component serves as the highest level abstract base class for all components.</strong></p>
<ul style="text-align:justify;">
<li><strong>Identity </strong>- All Components must have a non-null id which is  retrieved by calling getId(). The id must be unique within the  MarkupContainer that holds the Component, but does not have to be globally  unique or unique within a Page&#8217;s component hierarchy.</li>
<li><strong>Hierarchy </strong>- A component has a parent which can be retrieved with  getParent(). If a component is an instance of MarkupContainer, it may have  children. In this way it has a place in the hierarchy of components contained  on a given page. The <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#isAncestorOf%28wicket.Component%29"><code>isAncestorOf(Component)</code></a> method returns  true if this Component is an ancestor of the given Component.</li>
<li><strong>Component Paths </strong>- The path from the Page at the root of the  component hierarchy to a given Component is simply the concatenation with dot  separators of each id along the way. For example, the path &#8220;a.b.c&#8221; would  refer to the component named &#8220;c&#8221; inside the MarkupContainer named &#8220;b&#8221; inside  the container named &#8220;a&#8221;. The path to a component can be retrieved by calling  getPath(). This path is an absolute path beginning with the id of the Page at  the root. Pages bear a PageMap/Session-relative identifier as their id, so  each absolute path will begin with a number, such as &#8220;0.a.b.c&#8221;. To get a  Component path relative to the page that contains it, you can call  getPageRelativePath().</li>
<li><strong>LifeCycle </strong>- Components participate in the following lifecycle  phases:
<ul>
<li><strong>Construction </strong>- A Component is constructed with the Java language  new operator. Children may be added during construction if the Component is a  MarkupContainer.</li>
<li><strong>Request Handling </strong>- An incoming request is processed by a protocol  request handler such as WicketServlet. An associated Application object  creates Session, Request and Response objects for use by a given Component in  updating its model and rendering a response. These objects are stored inside  a container called <a title="class in wicket" href="http://wicket.sourceforge.net/apidocs/wicket/RequestCycle.html"><code>RequestCycle</code></a> which is accessible via  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getRequestCycle%28%29"><code>getRequestCycle()</code></a>. The convenience methods  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getRequest%28%29"><code>getRequest()</code></a>, <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getResponse%28%29"><code>getResponse()</code></a> and  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getSession%28%29"><code>getSession()</code></a> provide easy access to the contents of this  container.</li>
<li><strong>Listener Invocation </strong>- If the request references a listener on an  existing Component, that listener is called, allowing arbitrary user code to  handle events such as link clicks or form submits. Although arbitrary  listeners are supported in Wicket, the need to implement a new class of  listener is unlikely for a web application and even the need to implement a  listener interface directly is highly discouraged. Instead, calls to  listeners are routed through logic specific to the event, resulting in calls  to user code through other overridable methods. For example, the  <a href="http://wicket.sourceforge.net/apidocs/wicket/markup/html/form/IFormSubmitListener.html#onFormSubmitted%28%29"><code>IFormSubmitListener.onFormSubmitted()</code></a> method  implemented by the Form class is really a private implementation detail of  the Form class that is not designed to be overridden (although unfortunately,  it must be public since all interface methods in Java must be public).  Instead, Form subclasses should override user-oriented methods such as  onValidate(), onSubmit() and onError() (although only the latter two are  likely to be overridden in practice).</li>
<li><strong>onBeginRequest </strong>- The <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#onBeginRequest%28%29"><code>onBeginRequest()</code></a> method is  called.</li>
<li><strong>Form Submit </strong>- If a Form has been submitted and the Component is a  FormComponent, the component&#8217;s model is validated by a call to  FormComponent.validate().</li>
<li><strong>Form Model Update </strong>- If a valid Form has been submitted and the  Component is a FormComponent, the component&#8217;s model is updated by a call to  FormComponent.updateModel().</li>
<li><strong>Rendering </strong>- A markup response is generated by the Component via  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#render%28%29"><code>render()</code></a>, which calls subclass implementation code  contained in <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#onRender%28%29"><code>onRender()</code></a>. Once this phase begins, a  Component becomes immutable. Attempts to alter the Component will result in a  WicketRuntimeException.</li>
<li><strong>onEndRequest </strong>() &#8211; The <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#onEndRequest%28%29"><code>onEndRequest()</code></a> method is  called.</li>
</ul>
</li>
<li><strong>Component Models </strong>- The primary responsibility of a component is  to use its model (an object that implements IModel), which can be set via  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#setModel%28wicket.model.IModel%29"><code>setModel(IModel model)</code></a> and retrieved via  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getModel%28%29"><code>getModel()</code></a>, to render a response in an appropriate markup  language, such as HTML. In addition, form components know how to update their  models based on request information. Since the IModel interface is a wrapper  around an actual model object, a convenience method  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getModelObject%28%29"><code>getModelObject()</code></a> is provided to retrieve the model Object  from its IModel wrapper. A further convenience method,  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getModelObjectAsString%28%29"><code>getModelObjectAsString()</code></a>, is provided for the very common  operation of converting the wrapped model Object to a String.</li>
<li><strong>Visibility </strong>- Components which have setVisible(false) will return  false from isVisible() and will not render a response (nor will their  children).</li>
<li><strong>Page </strong>- The Page containing any given Component can be retrieved  by calling <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getPage%28%29"><code>getPage()</code></a>. If the Component is not attached to  a Page, an IllegalStateException will be thrown. An equivalent method,  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#findPage%28%29"><code>findPage()</code></a> is available for special circumstances where it  might be desirable to get a null reference back instead.</li>
<li><strong>Session </strong>- The Page for a Component points back to the Session  that contains the Page. The Session for a component can be accessed with the  convenience method getSession(), which simply calls getPage().getSession().</li>
<li><strong>Locale </strong>- The Locale for a Component is available through the  convenience method getLocale(), which is equivalent to  getSession().getLocale().</li>
<li><strong>String Resources </strong>- Components can have associated String  resources via the Application&#8217;s Localizer, which is available through the  method <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getLocalizer%28%29"><code>getLocalizer()</code></a>. The convenience methods  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getString%28java.lang.String%29"><code>getString(String key)</code></a> and  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getString%28java.lang.String,%20wicket.model.IModel%29"><code>getString(String key, IModel model)</code></a> wrap the identical  methods on the Application Localizer for easy access in Components.</li>
<li><strong>Style </strong>- The style (&#8220;skin&#8221;) for a component is available through  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getStyle%28%29"><code>getStyle()</code></a>, which is equivalent to  getSession().getStyle(). Styles are intended to give a particular look to a  Component or Resource that is independent of its Locale. For example, a style  might be a set of resources, including images and markup files, which gives  the design look of &#8220;ocean&#8221; to the user. If the Session&#8217;s style is set to  &#8220;ocean&#8221; and these resources are given names suffixed with &#8220;_ocean&#8221;, Wicket&#8217;s  resource management logic will prefer these resources to other resources,  such as default resources, which are not as good of a match.</li>
<li><strong>Variation </strong>- Whereas Styles are Session (user) specific,  variations are component specific. E.g. if the Style is &#8220;ocean&#8221; and the  Variation is &#8220;NorthSea&#8221;, than the resources are given the names suffixed with  &#8220;_ocean_NorthSea&#8221;.</li>
<li><strong>AttributeModifiers </strong>- You can add one or more  <a title="class in wicket" href="http://wicket.sourceforge.net/apidocs/wicket/AttributeModifier.html"><code>AttributeModifier</code></a>s to any component if you need to programmatically  manipulate attributes of the markup tag to which a Component is attached.</li>
<li><strong>Application, ApplicationSettings and ApplicationPages </strong>- The  getApplication() method provides convenient access to the Application for a  Component via getSession().getApplication(). The getApplicationSettings()  method is equivalent to getApplication().getSettings(). The  getApplicationPages is equivalent to getApplication().getPages().</li>
<li><strong>Feedback Messages </strong>- The <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#debug%28java.lang.String%29"><code>debug(String)</code></a>,  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#info%28java.lang.String%29"><code>info(String)</code></a>, <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#warn%28java.lang.String%29"><code>warn(String)</code></a>,  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#error%28java.lang.String%29"><code>error(String)</code></a> and <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#fatal%28java.lang.String%29"><code>fatal(String)</code></a> methods  associate feedback messages with a Component. It is generally not necessary  to use these methods directly since Wicket validators automatically register  feedback messages on Components. Any feedback message for a given Component  can be retrieved with <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getFeedbackMessage%28%29"><code>getFeedbackMessage()</code></a>.</li>
<li><strong>Page Factory </strong>- It is possible to change the way that Pages are  constructed by overriding the <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#getPageFactory%28%29"><code>getPageFactory()</code></a> method,  returning your own implementation of <a title="interface in wicket" href="http://wicket.sourceforge.net/apidocs/wicket/IPageFactory.html"><code>IPageFactory</code></a>.</li>
<li><strong>Versioning </strong>- Pages are the unit of versioning in Wicket, but  fine-grained control of which Components should participate in versioning is  possible via the <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#setVersioned%28boolean%29"><code>setVersioned(boolean)</code></a> method. The  versioning participation of a given Component can be retrieved with  <a href="http://wicket.sourceforge.net/apidocs/wicket/Component.html#isVersioned%28%29"><code>isVersioned()</code></a>.</li>
<li><strong>AJAX support</strong>- Components can be re-rendered after the whole Page  has been rendered at least once by calling doRender().you can use the live link for ppt downloads
<dl>
<dt> </dt>
</dl>
</li>
</ul>
<p style="text-align:justify;"><a href="http://wicket.files.wordpress.com/2009/12/wicket.ppt">wicket PPT for beginers download,</a></p>
<p style="text-align:justify;">Here is the reference for the standard Wicket GUI components: <a title="Cmponent referrnce in wicket" href="http://wicketstuff.org/wicket13/compref/" target="_blank">Component Reference</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=53&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2009/12/23/wicket-tits-helps-you-for-beginers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>Wicket Based sites</title>
		<link>http://wicket.wordpress.com/2009/12/21/wicket-based-sites/</link>
		<comments>http://wicket.wordpress.com/2009/12/21/wicket-based-sites/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 03:38:47 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>
		<category><![CDATA[example website]]></category>
		<category><![CDATA[example website for wicket]]></category>
		<category><![CDATA[example websites for wicket]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[model website based on wicket]]></category>
		<category><![CDATA[readymade webbased wicket site]]></category>
		<category><![CDATA[site for wicket]]></category>
		<category><![CDATA[sites using wicket]]></category>
		<category><![CDATA[website for wicket]]></category>
		<category><![CDATA[website with wicket]]></category>
		<category><![CDATA[wicket]]></category>
		<category><![CDATA[wicket based sites]]></category>
		<category><![CDATA[wicket based websites]]></category>
		<category><![CDATA[wicket project]]></category>
		<category><![CDATA[wicket source code]]></category>
		<category><![CDATA[wicket sties]]></category>
		<category><![CDATA[wicket web sites]]></category>
		<category><![CDATA[wicket website]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2009/12/21/wicket-based-sites/</guid>
		<description><![CDATA[* FITCOMPLEX.SK FITCOMPLEX is portal about healthy lifestyle, nutrition and exercise. (Slovak language) * InLaconia.gr InLaconia.gr is a travel and business guide for Laconia in Greece. * InsideWood InsideWood contains brief descriptions of fossil and modern woody dicots (hardwoods) from more than 200 plant families, and is searchable by an interactive, multiple-entry key. There are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=42&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<ul>
<li>*<a title="Fit Complex" href="http://www.fitcomplex.sk/" target="_blank"> FITCOMPLEX</a>.SK FITCOMPLEX is portal about healthy lifestyle, nutrition and exercise. (Slovak language)<br />
* <a title="inlaconia.gr" href="http://www.inlaconia.gr/index" target="_blank">InLaconia.gr</a> InLaconia.gr is a travel and business guide for Laconia in Greece.<br />
*<a title="Inside Wood" href="http://insidewood.lib.ncsu.edu" target="_blank"> InsideWood</a> InsideWood contains brief descriptions of fossil and modern woody dicots (hardwoods) from more than 200 plant families, and is searchable by an interactive, multiple-entry key. There are over 34,000 images showing anatomical details.<br />
* <a title="Busca Books" href="http://www.buscabooks.com.br/livros/" target="_blank">BuscaBooks </a>Buscabooks is a amazon associate web site for brazilian portuguese language users.<br />
* <a title="ai-online" href="http://www.ai-online.info/aionline" target="_blank">Abstract Database</a> Online serach engine for published congress abstracts<br />
* <a title="Fabulous40" href="http://fabulously40.com/" target="_blank">Fabulously40 </a>40+ woman&#8217;s social network. Rails site gone wicket.<br />
* <a title="Meetmoi" href="http://www.meetmoi.com/" target="_blank">MeetMoi</a> Location based mobile dating.<br />
* <a title="Nemours" href="http://www.nemours.org/index.html" target="_blank">Nemours</a> One of the nation&#8217;s largest children&#8217;s health systems<br />
* <a title="Next Door" href="http://nextdoor.fi" target="_blank">NextDoor</a> Handyman recruiting and yellow pages service for various Domestic Services<br />
* <a title="Tuntinetti" href="http://Tuntinetti.fi">Tuntinetti</a> Time tracking online<br />
* <a class="aligncenter" title="Seemywhere" href="http://www.seemywhere.com/home.0" target="_blank">seeMyWhere </a>Allows you to create a public page that tracks your location automatically<br />
* Roo10 Roo10.com is a social news, bookmarking and ratings site that allows you to share, rate and discover new content. You can post content here on practically anything &#8211; both from the web the &#8220;real&#8221; world. Users of the site can then give your posts a rating out of 10.<br />
* 8vents Message, Photo, File sharing service.<br />
* Ninan Binary Download Usenet Client. Struts application currently being converted from struts to wicket. Access to wicket is currently though svn. (free and opensource project)<br />
* Virtual Ventures Preview software developed by Fortune 500 companies, predict their success for commercialization, earn cash. Fully developed in Wicket and Spring.<br />
* Pink Laptops Pink Laptops.<br />
* Coderspiel Blog of N8han written using Wicket and databinder<br />
* Artifactory Artifactory is a maven2 proxy based on Wicket<br />
* JTrac JTrac is an open source and highly customizable issue-tracking web-application written in Java.<br />
* morons.org Morons.org is a community website based on tally-ho<br />
* Used Cheap Laptops Used Cheap Laptops.<br />
* tally-ho Forum/Community software powering morons.org<br />
* TexasHuntFish Community site for Texas sportsmen. Currently being converted from ColdFusion to Wicket &#8211; about half way there.<br />
* Teachscape A professional learning system.<br />
* Servoy A RAD environment which uses Wicket for web interface generation<br />
* Voicetribe Voicetribe adds online commentaries to your favorite DVDs.<br />
* Eventful Eventful allows you to manage your event with simplicity and ease.<br />
* Irrigator A simple web interface for controlling water taps in an irrigation system<br />
* Burgerweeshuis An open source CMS for pop venues, currently only dutch<br />
* Szeretgom.hu A Hungarian community web site built on wicket for the city of Esztergom<br />
* Track Detective A site for GPS track analysis and manipulation<br />
* Basisregister Bedrijven Amsterdam. An internal site to cross check company data over several databases for the municipality of Amsterdam.<br />
* Papernapkin.org A code pastebin with syntax highlighting.<br />
* Alliance Communications Managment Alliance uses wicket for internal sites which provide reporting and bug tracking for internal software systems.<br />
* Vocus student information system Topicus created a web based student administration system for highschools. The application is not publicly available.<br />
* Jobindsats.dk Danish government employment statistic report generator.<br />
* WebiCal A Web application to view and edit multiple iCalendars</li>
<li>* Sell@Market Is a web-based solution that helps to protect your gains and cut down your losses on stock trading.<br />
* GenieTown GenieTown is building a unique online community of customers and service providers. The site is designed to restore the lost experience of Main Street, where business was conducted in a personal way, the resources were local, and reputation was paramount.<br />
* Finan Finan is a financial analysis tool and now features a web based solution for their win32 deplhi client application built using Wicket<br />
* jWeekend (OO &amp; Wicket Training Courses) A Wicket site (nice/simple AJAXified cart on the &#8220;Booking&#8221; page).<br />
* datawink an online chart pattern recognition search engine<br />
* Avigo.de Atlasreisen.de AdacReisen.de Der.de Dertour.de Meiers-WeltReisen.de Tourism portals built by Wicket-Hibernate-Spring trio<br />
* B-Side B-Side is a distributor and online marketplace for independent films<br />
* TeachUs Open Source booking system designed for teachers with one-to-one tuition. Online demo (login with leif/leif). Project website<br />
* javaMix Java news aggregation site<br />
* Vegas.com Travel and entertainment site for Las Vegas shows, hotels, tours, club passes, etc.<br />
* beTurtle &#8216;Green&#8217; social networking and information portal.<br />
* My Picture Town Photo sharing service by Nikon<br />
* IndyPhone Customize your mobile phone by creating your own logos.<br />
* jalbum.net Photo album hosting is Wicket and all of site was migrated from JSP.<br />
* Me.dium.com Social browsing company bringing a unique experience to the online world.<br />
* yeigo.com Mobile VoIP solution, instant messaging (click signup for the wicket part).<br />
* Fenlab Nigeria Limited Agents of Hobart Foster and Other cooling equip. manufacturers in Nigeria<br />
* uTIPu Record and share your screen in a video.<br />
* Davano Collaborative storytelling and Play-by-post-RPG supporting system. Rewritten from from PHP to Wicket+Spring+Hibernate.<br />
* s q u a r e e y e s i c o n h a r m o n yGallery of over 1550 downloadable tv icons for the Harmony One remote.<br />
* The National Will Database A Repository of Wills, Executors and Solicitors. Wicket 1.3, Spring and Hibernate. Thanks to Qwicket and all the Wicket team.<br />
* Tenant Checker A commercial service for UK landlords. Uses Wicket, Spring and Hibernate. Short blog entry announcing its arrival here Enterprise Technical Architecture<br />
* Wego Travel search engine. Using wicket for flights schedules module<br />
* iSport.eu Football (soccer) news aggregator. Uses Wicket, Spring, Hibernate and Derby, see the blog entry for details<br />
* IslamicDesignHouse A shopping site for innovative and contemporary islamic goods such as jilbabs. Uses Wicket, Spring and Hibernate.<br />
* Lyhoo A personalized product search, user needs matching and alerting site in Chinese. Migrated from Spring MVC.<br />
* LINK ATM Locator Search for ATM&#8217;s in the UK. Thanks to the Wicket Team and nmwael+WicketStuff for the GMap code.<br />
* Songtexte.com A social network for music geeks including lyrics, videos, &#8230;. Uses Wicket, Spring, Hibernate.<br />
* paulimot.de A shopping site selling turning and milling maschines and all needed accessories, &#8230; Uses Wicket, Spring and Eclipselink for the frontend as well as the administrative shop interface.<br />
* OjoDojo A funny picture website that lets users organize and rank the best photo memes on the internet. Uses Wicket, Spring, iBatis.<br />
* hackystat-ui-wicket Wicket-based interface to Hackystat<br />
* syntevo.com SVN client: SmartSVN, CVS client: SmartCVS<br />
* Rate A Rear &#8211; Don&#8217;t view on a computer at work!<br />
* mygoods.at &#8211; food price comparison<br />
* tipSpot &#8211; Your social city guide<br />
* HussainiAbdu &#8211; Personal Website providing educational information and resources.<br />
* SVNsite Subversion Hosting &#8211; commmercial SVN hosting service built on top of Wicket, JPA and Wicket RAD.<br />
* Loma Linda Physicians Search &#8211; a physicians search module for Loma Linda University Medical Center developed in Wicket and integrated with TeamSite. Developed by Mystic<br />
* LeapFrog Learning Path &#8211; Learning Path helps parents interact with their child&#8217;s progress on LeapFrog devices such as Tag, Leapster2, Didj, and Crammer. Mystic developed and maintains the Wicket-based application.<br />
* Estobel&#8217;s website &#8211; Brazilian company of upholstered furniture (wicket, spring and hibernate)<br />
* Profile2 &#8211; A Web2-styled Wicket-based Profile tool for Sakai.<br />
* Statistic Charts &#8211; A dynamic charts mashup with very nice visuals. Uses Wicket, Google Visualization, Spring. A short blog description here.<br />
* Tip Links Travel links directory. Wicket, Spring, Google Visualization, Hibernate Search, Lucene. A short blog description here<br />
* KinoEstet Responses, opinions about films, and films ratings (russian language)<br />
* Gesvalfi, Property Management in Valencia Webpage of Gesvalfi, Property Management, a company in Valencia who&#8217;s main purpose is the administration and management of neighbour communities.<br />
* Citikey Free local business directory for the UK and Ireland<br />
* CompressLink Free URL shortening service<br />
* Gold Lock<br />
* Devproof</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=42&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2009/12/21/wicket-based-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>DataBinders &#8211; A tool kit for wicket and its data binding applications</title>
		<link>http://wicket.wordpress.com/2009/12/14/databinders-a-tool-kit-for-wicket-and-its-data-binding-applications/</link>
		<comments>http://wicket.wordpress.com/2009/12/14/databinders-a-tool-kit-for-wicket-and-its-data-binding-applications/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 16:58:57 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2009/12/14/databinders-a-tool-kit-for-wicket-and-its-data-binding-applications/</guid>
		<description><![CDATA[DataBinders is a programming toolkit for data–driven Wicket applications. Generally preferring creativity over convention, Databinder’s aim is to facilitate database programming for the Web that is straightforward, pleasant, and flexible. updated to Wicket 1.3.5 and Hibernate 3.3.1. you can look at the overview of wicket databinder here http://databinder.net/wicket/show/overview/ The databinder for database binding application Examples [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=35&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>DataBinders  is a programming toolkit for data–driven Wicket applications. Generally preferring creativity over convention, Databinder’s aim is to facilitate database programming for the Web that is straightforward, pleasant, and flexible.</p>
<p>updated to Wicket 1.3.5 and Hibernate 3.3.1.</p>
<p>you can look at the overview of wicket databinder here</p>
<p><a title="Overview of databinder" href="http://databinder.net/wicket/show/overview/" target="_blank">http://databinder.net/wicket/show/overview/</a></p>
<p>The databinder for database binding application Examples are shown here. Its a maven based application</p>
<p><a title="DataBinder Examples" href="http://databinder.net/wicket/show/overview/about-examples" target="_blank">http://databinder.net/wicket/show/overview/about-examples</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=35&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2009/12/14/databinders-a-tool-kit-for-wicket-and-its-data-binding-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
		<item>
		<title>Wicket Web Beans</title>
		<link>http://wicket.wordpress.com/2009/12/14/wicket-web-beans/</link>
		<comments>http://wicket.wordpress.com/2009/12/14/wicket-web-beans/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 16:24:53 +0000</pubDate>
		<dc:creator>pons</dc:creator>
				<category><![CDATA[apache wicket]]></category>

		<guid isPermaLink="false">http://wicket.wordpress.com/2009/12/14/wicket-web-beans/</guid>
		<description><![CDATA[Wicket Web Beans Introduction to Wicket Web Beans Wicket Web Beans (WWB) is an Apache Wicket (http://wicket.apache.org) component toolkit for displaying and editing POJOs that conform to the JavaBeans specification. Web pages are automatically generated based on bean properties and certain conventions. If necessary, the layout, editability, and actions of these pages can be customized [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=31&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Wicket Web Beans</strong><br />
<strong>Introduction to Wicket Web Beans</strong></p>
<p>Wicket Web Beans (WWB) is an Apache Wicket (http://wicket.apache.org) component toolkit for displaying and editing POJOs that conform to the JavaBeans specification. Web pages are automatically generated based on bean properties and certain conventions. If necessary, the layout, editability, and actions of these pages can be customized on an exception basis. In other words, the toolkit normally does what you&#8217;d expect, but when it doesn&#8217;t, you can override its behavior.</p>
<p>At the highest-level, the net.sourceforge.wicketwebbeans.containers.BeanForm component provides rich AJAX form functionality. The form is embedded in a Page designed by you. This allows you to create customized page designs. Also, this allows multiple</p>
<p>BeanForms to be incorporated on a single page. At your choosing, other lower-level components may be used independently of BeanForm (e.g., BeanGridPanel). WWB does not try to force you into a certain way of doing things, but BeanForm makes it very convenient to implement a bean-based form if you don&#8217;t want to go to a lot of extra work. You focus on the model (beans), WWB handles the user interface.</p>
<p>Fields within a form are dynamically sent back to the server-side bean as they are changed, which eliminates the typical submit cycle. This makes WWB act more like a rich client application and less like a standard forms-based application.</p>
<p><strong>Requirements</strong></p>
<p><strong>WWB currently requires:</strong></p>
<p>* Maven 2.0 is required to build. A binary WAR file (wicketwebbeans-examples.war) containing all of the dependent jars is available.<br />
* Wicket 1.3.0-rc1 (http://wicket.apache.org) &#8211; dependency managed by Maven. Apache Wicket 1.2.6 is also supported in a separate branch.<br />
* Apache Commons BeanUtils (via Maven http://maven.apache.org)<br />
* Java 5+. WWB has been developed and tested mostly with Java 6.</p>
<p><strong>Simple Example</strong></p>
<p>Let&#8217;s take a look at a simple bean from the examples: net.sourceforge.wicketwebbeans.examples.simple.TestBean</p>
<p>This is a Java Bean compliant POJO. As most people know, getters start with &#8220;get&#8221; or &#8220;is&#8221; and setters start with &#8220;set&#8221;. Java Beans also require a public no-argument constructor, which we have. All beans must be Serializable by Wicket convention.</p>
<p>This bean also implements PropertyChangeListeners and Events. This is an optional part of the Java Beans spec. However, if your bean implements add/removePropertyChangeListener(), BeanForm will automatically register itself as a listener to your bean. In this example, we&#8217;re going to use PropertyChangeEvents to notify BeanForm when dependent properties change.</p>
<p>If you don&#8217;t implement PropertyChangeListeners, BeanForm already knows if a single property changes from a change on the form. For example, setFirstName() automatically changes the input value to upper case. BeanForm knows to refresh this field on the form because the user changed it. If you type &#8220;xyzzy&#8221; in the First Name field and tab or click away from the field, the field is sent to the bean and the field is dynamically refreshed to it&#8217;s new value &#8220;XYZZY&#8221;.</p>
<p>Before we get too deep, let&#8217;s take a look at the Wicket page (net.sourceforge.wicketwebbeans.examples.simple.SimpleBeanPage) and HTML:</p>
<p><strong>Simple Bean Page</strong></p>
<p>package net.sourceforge.wicketwebbeans.examples.simple;</p>
<p>import net.sourceforge.wicketwebbeans.containers.BeanForm;<br />
import net.sourceforge.wicketwebbeans.model.BeanMetaData;</p>
<p>import org.apache.wicket.markup.html.WebPage;</p>
<p>public class SimpleBeanPage extends WebPage<br />
{<br />
public SimpleBeanPage()<br />
{<br />
TestBean bean = new TestBean();<br />
BeanMetaData meta = new BeanMetaData(bean.getClass(), null, this, null, false);<br />
add( new BeanForm(&#8220;beanForm&#8221;, bean, meta) );<br />
}<br />
}</p>
<p>You can see this is pretty simple. There is only a single component added to the page &#8211; &#8220;beanForm&#8221; &#8211; which is an instance of net.sourceforge.wicketwebbeans.containers.BeanForm. You can see in the constructor that we create an instance of TestBean which is passed to BeanForm. We also create an instance of net.sourceforge.wicketwebbeans.model.BeanMetaData. BeanMetaData reflects on the TestBean class to derive the fields and actions for the form.</p>
<p>Note that you can also pass a Wicket IModel that contains your bean, rather than the bean itself, to BeanForm. If the bean is a List, or the IModel contains a List, the results will be displayed as a data table.</p>
<p>If you bring up this page in a browser (see RunningSamples), you will see something like:</p>
<p>Eclipse:/WicketWebBeans/doc/wiki/images/SimpleBeanScreenShot.png</p>
<p>Note that &#8220;Result&#8221; is not editable because there is no setter method on the bean. Also, if you type numbers into Operand 1 and Operand 2, you&#8217;ll see that the Result field automatically is calculated and updated. The calculation is done by TestBean and the PropertyChangeEvents are notifying WWB to update the result field.</p>
<p>As we mentioned, BeanMetaData represents the metadata for a bean properties and actions. By default, the metadata originates by convention:</p>
<ul>
<li> Label names for properties are derived from the property name. E.g., &#8220;customerName&#8221; becomes &#8220;Customer Name&#8221;; &#8220;address2&#8243; becomes &#8220;Address 2&#8243; (or from the JavaBean BeanInfo &#8220;displayName&#8221;).</li>
<li> Field components for the Java primitive/wrapper types, enum types, java.util.Date and java.util.Calendar thier sub-classes, and java.util.Lists are pre-configured.</li>
<li> All JavaBean properties are displayed. Non-JavaBean methods are not displayed.</li>
<li> All fields are editable if viewOnly is false (see the BeanMetaData constructor). Otherwise they are all view-only.</li>
<li> If a property is not writable, it is displayed view-only.</li>
<li> If your beans use JPA or JDO, other property aspects can be controlled by annotations available in these APIs.</li>
<li> Actions are derived from action methods defined on the component (e.g., the Page). See Actions below.</li>
<li> All fields are displayed in alphabetical order by property name.</li>
<li> All fields are displayed in a single page. (Known as the &#8220;default tab&#8221;, but the tab is hidden).</li>
</ul>
<p>Field types are deduced from the property&#8217;s Java type. The mappings from the property&#8217;s Java class to the net.sourceforge.wicketwebbeans.fields.Field type is done by net.sourceforge.wicketwebbeans.model.ComponentRegistry. ComponentRegistry has mappings for most common types and more types can be added if necessary. Also, Field types may be overridden for a specific property in the &#8220;beanprops&#8221; file, which we&#8217;ll discuss later.</p>
<p>Up to my Knowledge WWB is based on properties , there is also Wicket web beans data binder for your reference  I will give you the link if you really interested to go further</p>
<p><a title="Wicket web beans" href="http://wicketwebbeans.sourceforge.net/wiki-html/SimpleExample.html" target="_blank">http://wicketwebbeans.sourceforge.net/wiki-html/SimpleExample.html</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/wicket.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/wicket.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/wicket.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/wicket.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/wicket.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/wicket.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/wicket.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/wicket.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/wicket.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/wicket.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/wicket.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/wicket.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/wicket.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/wicket.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=wicket.wordpress.com&amp;blog=4033542&amp;post=31&amp;subd=wicket&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://wicket.wordpress.com/2009/12/14/wicket-web-beans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618e9ff88ee12fa67e933cb9828e5fc1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pons</media:title>
		</media:content>
	</item>
	</channel>
</rss>
