<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: User friendly form validation with Wicket</title>
	<atom:link href="http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/feed" rel="self" type="application/rss+xml" />
	<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket</link>
	<description></description>
	<lastBuildDate>Fri, 04 May 2012 11:11:43 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Joni K</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-42366</link>
		<dc:creator>Joni K</dc:creator>
		<pubDate>Fri, 04 May 2012 11:11:43 +0000</pubDate>
		<guid isPermaLink="false">#comment-42366</guid>
		<description>If anyone else is still using Daan&#039;s FeedbackLabel, and wondering how to get rid of unnecessary  &quot;Component-targetted feedback message was left unrendered.&quot; WARN messages flooding your log, the answer is that component.getFeedbackMessage().markRendered() should be appropriately called in FeedbackLabel&#039;s onBeforeRender().

More info on Stack Overflow: http://stackoverflow.com/questions/10445703/how-to-avoid-superfluous-wicket-log-warnings-when-using-field-specific-feedbackl</description>
		<content:encoded><![CDATA[<p>If anyone else is still using Daan&#8217;s FeedbackLabel, and wondering how to get rid of unnecessary  &#8220;Component-targetted feedback message was left unrendered.&#8221; WARN messages flooding your log, the answer is that component.getFeedbackMessage().markRendered() should be appropriately called in FeedbackLabel&#8217;s onBeforeRender().</p>
<p>More info on Stack Overflow: <a href="http://stackoverflow.com/questions/10445703/how-to-avoid-superfluous-wicket-log-warnings-when-using-field-specific-feedbackl" rel="nofollow">http://stackoverflow.com/questions/10445703/how-to-avoid-superfluous-wicket-log-warnings-when-using-field-specific-feedbackl</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: rotsch</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-27261</link>
		<dc:creator>rotsch</dc:creator>
		<pubDate>Mon, 07 Feb 2011 10:15:33 +0000</pubDate>
		<guid isPermaLink="false">#comment-27261</guid>
		<description>hi there!

are there any solution for the ugly rewrite of the URL?

I have bookmarkable pages:
mountBookmarkablePage(&quot;/Login&quot;, Login.class);

the form validator rewrites this to:
http://localhost:8080/?wicket:interface=:1::::
when there is a validation error (e.g. no login-name)

i haven&#039;t found a solution yet, but i think this case isn&#039;t that uncommon?

thanks for any reply
-rotsch</description>
		<content:encoded><![CDATA[<p>hi there!</p>
<p>are there any solution for the ugly rewrite of the URL?</p>
<p>I have bookmarkable pages:<br />
mountBookmarkablePage(&#8220;/Login&#8221;, Login.class);</p>
<p>the form validator rewrites this to:<br />
<a href="http://localhost:8080/?wicket:interface=:1:::" rel="nofollow">http://localhost:8080/?wicket:interface=:1:::</a>:<br />
when there is a validation error (e.g. no login-name)</p>
<p>i haven&#8217;t found a solution yet, but i think this case isn&#8217;t that uncommon?</p>
<p>thanks for any reply<br />
-rotsch</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: taha özket</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-27118</link>
		<dc:creator>taha özket</dc:creator>
		<pubDate>Sat, 29 Jan 2011 17:25:33 +0000</pubDate>
		<guid isPermaLink="false">#comment-27118</guid>
		<description>@tommy

use
	    	password.setResetPassword(false);</description>
		<content:encoded><![CDATA[<p>@tommy</p>
<p>use<br />
	    	password.setResetPassword(false);</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: tommy</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-27096</link>
		<dc:creator>tommy</dc:creator>
		<pubDate>Fri, 28 Jan 2011 15:26:34 +0000</pubDate>
		<guid isPermaLink="false">#comment-27096</guid>
		<description>Thanks, it&#039;s working, but why i find a bug with password field, when i type password into it, it deleted my input automatic if i jump to next field to continue fill the form..</description>
		<content:encoded><![CDATA[<p>Thanks, it&#8217;s working, but why i find a bug with password field, when i type password into it, it deleted my input automatic if i jump to next field to continue fill the form..</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daan</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-25938</link>
		<dc:creator>Daan</dc:creator>
		<pubDate>Sun, 12 Dec 2010 10:55:46 +0000</pubDate>
		<guid isPermaLink="false">#comment-25938</guid>
		<description>Hi gmo,

I don&#039;t immediately see what&#039;s wrong with your code, or why it shouldn&#039;t work..
Did you call setOutputMarkupId(true) and setOutputPlaceholderTag(true) on the stuff that has to be refreshed?

It&#039;s more than 2 years ago I wrote this code, so I don&#039;t know all the nitty-gritty details anymore...

If you don&#039;t arrive at a solution, you can try the Wicket mailing list...

- Daan</description>
		<content:encoded><![CDATA[<p>Hi gmo,</p>
<p>I don&#8217;t immediately see what&#8217;s wrong with your code, or why it shouldn&#8217;t work..<br />
Did you call setOutputMarkupId(true) and setOutputPlaceholderTag(true) on the stuff that has to be refreshed?</p>
<p>It&#8217;s more than 2 years ago I wrote this code, so I don&#8217;t know all the nitty-gritty details anymore&#8230;</p>
<p>If you don&#8217;t arrive at a solution, you can try the Wicket mailing list&#8230;</p>
<p>- Daan</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: gmo</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-25743</link>
		<dc:creator>gmo</dc:creator>
		<pubDate>Fri, 03 Dec 2010 16:32:21 +0000</pubDate>
		<guid isPermaLink="false">#comment-25743</guid>
		<description>I&#039;m able to get this to work when it&#039;s added a basic panel. But when I want to add it to a list of ajax tabbed panels, the label  never appears. The validation works, but no message.  I have an unknown number of drivers, so I have to created a dynamic list of driver tabs in the tabbed panel.

What am I missing?

Here&#039;s a snippit:

public final class DriverPanel extends Panel {
    AjaxTabbedPanel driverTabbedPanel = null;
    List tabs = null;
    private List driverList;
    ....
    ...
    public DriverPanel(String id) {
        super(id);
        ......
        ......
        driverList = get from db....
        tabs = new ArrayList();
        Iterator drivers = driverList.iterator();
        index = 0;
        while (drivers.hasNext()) {
            DriverBean driver = drivers.next();
            AbstractTab theTab = new AbstractTab(new Model(&quot;Driver &quot; + index)) {

                final int tabNumber = index;

                public Panel getPanel(String panelId) {
                    Panel p = new TabPanel(panelId, new Model(panelId), tabNumber);

                    return p;
                }
            };
            index++;
            tabs.add(theTab);
        }
        driverTabbedPanel = new AjaxTabbedPanel(&quot;driverTabs&quot;, tabs);
        add(driverTabbedPanel);
    }

private class TabPanel extends Panel {

        private FeedbackLabel firstNameFeedbackLabel = null;
        private FeedbackLabel middleNameFeedbackLabel = null;
        private FeedbackLabel lastNameFeedbackLabel = null;
        private int driverNum = 0;

        public int getDriverNum() {
            return driverNum;
        }

        public void setDriverNum(int driverNum) {
            this.driverNum = driverNum;
        }

        public TabPanel(String id, IModel model, int driverNumber) {
            super(id, model);
            driverNum = driverNumber;
            TextField fNameTF = new UpdatingTextField(&quot;firstName&quot;, new PropertyModel(driverList.get(driverNumber), &quot;firstName&quot;), driverNumber);
            TextField mNameTF = new UpdatingTextField(&quot;middleName&quot;, new PropertyModel(driverList.get(driverNumber), &quot;middleName&quot;), driverNumber);
            TextField lNameTF = new UpdatingTextField(&quot;lastName&quot;, new PropertyModel(driverList.get(driverNumber), &quot;lastName&quot;), driverNumber);

            fNameTF.setOutputMarkupId(true);
            mNameTF.setOutputMarkupId(true);
            lNameTF.setOutputMarkupId(true);

            fNameTF.setRequired(true);
            lNameTF.setRequired(true);

            middleNameFeedbackLabel = new FeedbackLabel(&quot;middleName.feedback&quot;, mNameTF);
            firstNameFeedbackLabel = new FeedbackLabel(&quot;firstName.feedback&quot;, fNameTF);
            lastNameFeedbackLabel = new FeedbackLabel(&quot;lastName.feedback&quot;, lNameTF);
            
            add(fNameTF);
            add(mNameTF);
            add(lNameTF);
            
            add(middleNameFeedbackLabel);
            add(firstNameFeedbackLabel);
            add(lastNameFeedbackLabel);
        }
    };

    private static class UpdatingTextField extends TextField {

        String fieldName = null;
        int driverNumber = 0;

        public UpdatingTextField(String id, IModel model, int driver) {
            super(id, model);
            fieldName = id;
            driverNumber = driver;
            add(new AjaxFormComponentUpdatingBehavior(&quot;onblur&quot;) {

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            });
        }
    }
}</description>
		<content:encoded><![CDATA[<p>I&#8217;m able to get this to work when it&#8217;s added a basic panel. But when I want to add it to a list of ajax tabbed panels, the label  never appears. The validation works, but no message.  I have an unknown number of drivers, so I have to created a dynamic list of driver tabs in the tabbed panel.</p>
<p>What am I missing?</p>
<p>Here&#8217;s a snippit:</p>
<p>public final class DriverPanel extends Panel {<br />
    AjaxTabbedPanel driverTabbedPanel = null;<br />
    List tabs = null;<br />
    private List driverList;<br />
    &#8230;.<br />
    &#8230;<br />
    public DriverPanel(String id) {<br />
        super(id);<br />
        &#8230;&#8230;<br />
        &#8230;&#8230;<br />
        driverList = get from db&#8230;.<br />
        tabs = new ArrayList();<br />
        Iterator drivers = driverList.iterator();<br />
        index = 0;<br />
        while (drivers.hasNext()) {<br />
            DriverBean driver = drivers.next();<br />
            AbstractTab theTab = new AbstractTab(new Model(&#8220;Driver &#8221; + index)) {</p>
<p>                final int tabNumber = index;</p>
<p>                public Panel getPanel(String panelId) {<br />
                    Panel p = new TabPanel(panelId, new Model(panelId), tabNumber);</p>
<p>                    return p;<br />
                }<br />
            };<br />
            index++;<br />
            tabs.add(theTab);<br />
        }<br />
        driverTabbedPanel = new AjaxTabbedPanel(&#8220;driverTabs&#8221;, tabs);<br />
        add(driverTabbedPanel);<br />
    }</p>
<p>private class TabPanel extends Panel {</p>
<p>        private FeedbackLabel firstNameFeedbackLabel = null;<br />
        private FeedbackLabel middleNameFeedbackLabel = null;<br />
        private FeedbackLabel lastNameFeedbackLabel = null;<br />
        private int driverNum = 0;</p>
<p>        public int getDriverNum() {<br />
            return driverNum;<br />
        }</p>
<p>        public void setDriverNum(int driverNum) {<br />
            this.driverNum = driverNum;<br />
        }</p>
<p>        public TabPanel(String id, IModel model, int driverNumber) {<br />
            super(id, model);<br />
            driverNum = driverNumber;<br />
            TextField fNameTF = new UpdatingTextField(&#8220;firstName&#8221;, new PropertyModel(driverList.get(driverNumber), &#8220;firstName&#8221;), driverNumber);<br />
            TextField mNameTF = new UpdatingTextField(&#8220;middleName&#8221;, new PropertyModel(driverList.get(driverNumber), &#8220;middleName&#8221;), driverNumber);<br />
            TextField lNameTF = new UpdatingTextField(&#8220;lastName&#8221;, new PropertyModel(driverList.get(driverNumber), &#8220;lastName&#8221;), driverNumber);</p>
<p>            fNameTF.setOutputMarkupId(true);<br />
            mNameTF.setOutputMarkupId(true);<br />
            lNameTF.setOutputMarkupId(true);</p>
<p>            fNameTF.setRequired(true);<br />
            lNameTF.setRequired(true);</p>
<p>            middleNameFeedbackLabel = new FeedbackLabel(&#8220;middleName.feedback&#8221;, mNameTF);<br />
            firstNameFeedbackLabel = new FeedbackLabel(&#8220;firstName.feedback&#8221;, fNameTF);<br />
            lastNameFeedbackLabel = new FeedbackLabel(&#8220;lastName.feedback&#8221;, lNameTF);</p>
<p>            add(fNameTF);<br />
            add(mNameTF);<br />
            add(lNameTF);</p>
<p>            add(middleNameFeedbackLabel);<br />
            add(firstNameFeedbackLabel);<br />
            add(lastNameFeedbackLabel);<br />
        }<br />
    };</p>
<p>    private static class UpdatingTextField extends TextField {</p>
<p>        String fieldName = null;<br />
        int driverNumber = 0;</p>
<p>        public UpdatingTextField(String id, IModel model, int driver) {<br />
            super(id, model);<br />
            fieldName = id;<br />
            driverNumber = driver;<br />
            add(new AjaxFormComponentUpdatingBehavior(&#8220;onblur&#8221;) {</p>
<p>                @Override<br />
                protected void onUpdate(AjaxRequestTarget target) {<br />
                }<br />
            });<br />
        }<br />
    }<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daan</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-23471</link>
		<dc:creator>Daan</dc:creator>
		<pubDate>Tue, 10 Aug 2010 07:48:25 +0000</pubDate>
		<guid isPermaLink="false">#comment-23471</guid>
		<description>If you add the Javascript via a Wicket behavior, it should be retained even with an Wicket Ajax update.</description>
		<content:encoded><![CDATA[<p>If you add the Javascript via a Wicket behavior, it should be retained even with an Wicket Ajax update.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shawn</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-23411</link>
		<dc:creator>Shawn</dc:creator>
		<pubDate>Wed, 04 Aug 2010 18:24:28 +0000</pubDate>
		<guid isPermaLink="false">#comment-23411</guid>
		<description>Daan,

I&#039;m seeing a problem when changeCssClass is called it wipes out the onclick and onkeyup handlers I have on that particular  field the fieldlabel is associated with.

I think this line in particular does it:

 ajaxRequestTarget.addComponent(formComponent);

The handlers are set dynamically and work until the feedback label is shown via changeCssClass().

in the javascript:

fields[i].onkeyup = function(){ keyUpHandler(this);};
fields[i].onclick = function(){ clickHandler(this);};</description>
		<content:encoded><![CDATA[<p>Daan,</p>
<p>I&#8217;m seeing a problem when changeCssClass is called it wipes out the onclick and onkeyup handlers I have on that particular  field the fieldlabel is associated with.</p>
<p>I think this line in particular does it:</p>
<p> ajaxRequestTarget.addComponent(formComponent);</p>
<p>The handlers are set dynamically and work until the feedback label is shown via changeCssClass().</p>
<p>in the javascript:</p>
<p>fields[i].onkeyup = function(){ keyUpHandler(this);};<br />
fields[i].onclick = function(){ clickHandler(this);};</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ben</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-22913</link>
		<dc:creator>ben</dc:creator>
		<pubDate>Tue, 06 Jul 2010 06:56:42 +0000</pubDate>
		<guid isPermaLink="false">#comment-22913</guid>
		<description>Oops..... just ignore that. This is convention of my company :-)</description>
		<content:encoded><![CDATA[<p>Oops&#8230;.. just ignore that. This is convention of my company <img src='http://stuq.nl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nw</title>
		<link>http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket/comment-page-1#comment-22704</link>
		<dc:creator>nw</dc:creator>
		<pubDate>Tue, 22 Jun 2010 21:16:03 +0000</pubDate>
		<guid isPermaLink="false">#comment-22704</guid>
		<description>This is great, but did you... did you actually TRADEMARK the class name? Why on Earth would you do such a thing?</description>
		<content:encoded><![CDATA[<p>This is great, but did you&#8230; did you actually TRADEMARK the class name? Why on Earth would you do such a thing?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

