Martin,

Application#getComponentPostOnBeforeRenderListeners is how I am already
registering my FormErrorDecorator.

Attaching the validation errors after super.onBeforeRender() does not work
even for components that are statically added and not part of a list view.

Here's some psuedocode:

Form form = new Form("form", model) {
   protected void onBeforeRender() {
       super.onBeforeRender();
       attachValidationErrors();
   }
}

super.onBeforeRender() calls onBeforeRender() on all children which in turn
calls both the componentPreOnBeforeRenderListeners and the
componentPostOnBeforeRenderListeners. So by the time
attachValidationErrors() is called the error decorator has run and finished
(and done nothing as it found no errors).

If I move attachValidationErrors before super.onBeforeRender(), then it
works for statically added form components. It does not work for components
within ListViews because populateItem has not yet been called.

I could move some of the error attaching logic within populateItem but this
is ugly and leads to code duplication (as populateItem will not always be
called because I need setReuseItems(true)).

Any other ideas?





On Mon, Nov 24, 2014 at 3:23 PM, Martin Grigorov <mgrigo...@apache.org>
wrote:

> Hi,
>
> Try with org.apache.wicket.Application#getComponent*Post*
> OnBeforeRenderListeners()
>
> Martin Grigorov
> Wicket Training and Consulting
> https://twitter.com/mtgrigorov
>
> On Mon, Nov 24, 2014 at 2:50 PM, mscoon <msc...@gmail.com> wrote:
>
> > Hi all,
> >
> > I am using a FormErrorDecorator that implements an
> > IComponentOnBeforeRenderListener in order to automatically attach a css
> > class to form components with validation errors (see
> >
> >
> https://cwiki.apache.org/confluence/display/WICKET/Automatic+styling+of+form+errors
> > ).
> >
> > Sometimes I want to manually add errors to form components and I was
> doing
> > that in onBeforeRender() before the call to super.onBeforeRender(). I do
> > this because sometimes the object being edited is in an invalid state
> and I
> > want to show the validation errors right when the form opens and not
> after
> > a submit. This is working fine for most cases as the errors are attached
> to
> > the form components before the FormErrorDecorator runs.
> >
> > However, form components inside a list view are not created until the end
> > of ListView.onBeforeRender(). This means that I cannot attach errors
> before
> > this step because the list view items don't yet exist, and if I attach
> them
> > after onBeforeRender they are not picked up by the FormErrorDecorator.
> >
> > Any ideas?
> >
> > Thanks,
> > Marios
> >
>

Reply via email to