You don't need FormValidator for this.
A plain IValidator will do the job.
FormValidator should be used when you need to make some more complex
validation which involves several form components.

So just do:

TextField<Integer> textField = new TextField<>("someId", someModel,
Integer.class);
textField.add(new IValidator<Integer>() {

  public void validate(IValidatable<Integer> validatable) {
     if (!isValidNumber(validatable.getValue())) {
        validatable.error(new ValidationError("The input is not valid"));
     }
  }
});


AjaxButton submitButton = new AjaxButton("btn", form) {

  // onSubmit() ...

  protected void onError(AjaxRequestTarget target, Form form) {

     // 1. if the form is in ModalWindow then
     target.add(feedbackPanel);


     // 2. If you want to show Modal with the error then:
     modalWindow.setContent(new
SomePanelWithExplanation(ModalWindow.CONTENT_ID));
     modalWindow.open(target);
  }

}

There may be typos. I haven't written this code in IDE.






On Sun, Apr 28, 2013 at 10:43 PM, Taro Fukunaga <taro4cy...@gmail.com>wrote:

> When validation fails I need to display a validation error message in the
> ModalWindow. This code is from my validator.
>
> public class MyValidator
>     extends AbstractFormValidator
>     implements Serializable {
>
>     private final TextField<Integer> textField;
>
>     public MyValidator( TextField<Integer> textField ) {
>         this.textField = textField;
>     }
>
>     @Override
>     public FormComponent<?>[] getDependentFormComponents() {
>
>         return new FormComponent[] { textField };
>     }
>
>     @Override
>     public void validate( Form<?> form ) {
>
>         Integer value = textField.getConvertedInput();
>
>         if ( !isValidNumber( value.intValue() ) ) {
>
>             error( textField, ""invalid" );
>         }
>     }
>
> And in my panel I add it to my text field:
>
>         add( new MyFormValidator( textField ) );
>
> However when I run my code and submit the request, I get an NPE when
> value.initValue() is called because getConvertedInput() returns null. There
> is no value in the textField at this moment. That's why I thought that I
> need to possibly attach a behavior to the text field in order to get the
> value.
>
>
>
>
>
> --
> View this message in context:
> http://apache-wicket.1842946.n4.nabble.com/Form-not-displaying-messages-correctly-tp4658351p4658365.html
> Sent from the Users forum mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


-- 
Martin Grigorov
Wicket Training & Consulting
http://jWeekend.com <http://jweekend.com/>

Reply via email to