I went crazy and did this, I relied on I think Al Maw's thing from WUG London :

Add the below visitor to your form, you can also easy do scriptacoulus effects with this approach eg make the offender shake..

package zeuzgroup.application.component;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import org.apache.wicket.Component;
import org.apache.wicket.Component.IVisitor;
import org.apache.wicket.markup.html.form.FormComponent;

public class ShinyFormVisitor implements IVisitor, Serializable {
   Set visited = new HashSet();

   public Object component(Component c) {
       if (!visited.contains(c)) {
           visited.add(c);
           if (FormComponent.class.isInstance(c)) {
               c.setComponentBorder(new RequiredBorder());
               c.add(new ValidationMsgBehavior());
               c.add(new ErrorHighlightBehavior());
           }
       }
       return IVisitor.CONTINUE_TRAVERSAL;
   }
}


package zeuzgroup.application.component;

import org.apache.wicket.Component;
import org.apache.wicket.behavior.AbstractBehavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.FormComponent;

public class ErrorHighlightBehavior extends AbstractBehavior {
   public void onComponentTag(Component c, ComponentTag tag) {
       FormComponent fc = (FormComponent) c;
       if (!fc.isValid()) {
           tag.put("class", "error");
       }
   }
}

package zeuzgroup.application.component;

import org.apache.wicket.Component;
import org.apache.wicket.markup.html.border.MarkupComponentBorder;
import org.apache.wicket.markup.html.form.FormComponent;

public class RequiredBorder extends MarkupComponentBorder
{
public void renderAfter(Component component)
{
FormComponent fc = (FormComponent)component;
if (fc.isRequired())
{
super.renderAfter(component);
}
}
}

Required border
<html>
<body>
<wicket:border>
<wicket:body/>
<span class="requiredHint">*</span>
</wicket:border>
</body>
</html>

Chris Stein wrote:
Thanks, Igor. I've been playing around with your suggestions but still doesn't 
seem to make it work.
My onSubmit is not being called when I set a breakpoint there.
Is it possible that what I am asking for is not possible?


----- Original Message ----
From: Igor Vaynberg <[EMAIL PROTECTED]>
To: users@wicket.apache.org
Sent: Tuesday, September 23, 2008 10:48:54 PM
Subject: Re: Adding HTML class="invalid" after validating with 
IndicatingAjaxButton

target.addComponent(feedback);
target.addComponent(form); // you might have to add some div that is
around the form, not sure if browsers support replacing form tag well

-igor

On Tue, Sep 23, 2008 at 1:39 PM, Chris Stein <[EMAIL PROTECTED]> wrote:
Thanks, Igor. However, I tried it and it never showed up in the browser.
Even more so, when I set a breakpoint to the onComponentTag-method, it never 
gets called. Is that correct?
I only get this behavior when I am using the IndicatingAjaxButton--everything 
works fine with the regular buttons. Maybe I am missing something else here...

Here's my code:

/**
 * The panel with the form.
 */
public class SignInPanel extends Panel
{
 public SignInPanel(final String id)
 {
   super(id);

   feedback.setOutputMarkupId(true);
   add(feedback);

   add(new SignInForm("signInForm"));
 }


public final class SignInForm extends StatelessForm
{

 private final ValueMap properties = new ValueMap();

 public SignInForm(final String id)
 {
     super(id);

     FormComponent fc;

     fc = new RequiredTextField("username", new PropertyModel(properties, 
"username"));
     fc.add(new InvalidIndicator());
     fc.setOutputMarkupId(true);
     add(fc);

     fc = new PasswordTextField("password", new PropertyModel(properties, 
"password"));
     fc.add(new InvalidIndicator());
     fc.setOutputMarkupId(true);
     add(fc);

     AjaxFormValidatingBehavior.addToAllFormComponents(this, "onsubmit");

     this.add(new IndicatingAjaxButton("submit", this)
     {
       @Override
       protected void onSubmit(AjaxRequestTarget target, Form form)
       {
         //perform sign in
       }

       @Override
       protected void onError(AjaxRequestTarget target, Form form)
       {
         target.addComponent(feedback);
       }
     });

 }
}


/**
 * The validator. Thanks to Igor.
 */
public class InvalidIndicator extends AbstractBehavior
{
 @Override
 public void onComponentTag(final Component component, final ComponentTag tag)
 {
   boolean valid = ((FormComponent)component).isValid();
   if(!valid)
   {
     tag.getAttributes().put("class","invalid");
   }
 }
}





----- Original Message ----
From: Igor Vaynberg <[EMAIL PROTECTED]>
To: users@wicket.apache.org
Sent: Tuesday, September 23, 2008 5:50:08 PM
Subject: Re: Adding HTML class="invalid" after validating with 
IndicatingAjaxButton

public class invalidindicator extends abstractbehavior {
 protected void oncomponenttag(component c, tag t) {
     boolean valid=((formcomponent)c).isvalid();
     if (!valid) {
        tag.put("class","invalid");
    }
 }
}

formcomponent.add(new invalidindicator());

-igor

On Tue, Sep 23, 2008 at 2:53 AM, cstein1206 <[EMAIL PROTECTED]> wrote:
I basically want to achieve this:
http://www.jroller.com/karthikg/entry/wicket_and_ajax
but handle the validation only after the form has been submitted with an
AjaxIndicatingButton instead of with the "onblur" as in the example.

I think I tried too many things over the last couple of days and got totally
confused now. Would anybody be so kind to help me out a bit? What do I need
to add to the FormComponents so that they will be updated with an
HTML-attribute "class='invalid'"? So far my form doesn't do that (I did
setOutputMarkupId(true)).

Thanks a ton!
Chris
--
View this message in context: 
http://www.nabble.com/Adding-HTML-class%3D%22invalid%22-after-validating-with-IndicatingAjaxButton-tp19624501p19624501.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


--
-Wicket for love

Nino Martinez Wael
Java Specialist @ Jayway DK
http://www.jayway.dk
+45 2936 7684


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to