You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Thomas Cucchietti <th...@gmail.com> on 2010/07/08 11:25:37 UTC

[T5.1]Add a field specific error message using beforeLabel

Hi everybody!

I'm facing a problem I can't resolve, even after hours of reflexion and
tests so I'm asking for help :)

Here is my need : I would like to display the error message corresponding to
each field of my form just above the label of this field.

I've made some research and have found a very interesting post of Thiago
about custom ValidationDecorator.

I created mine, added it to my AppModule and everything should be ok.

Here is the specific part of my ValidationDecorator :

    @Override
    public void beforeLabel(Field field) {
        if (inError(field)) {
            markupWriter.element("div",
                    "class", "single-error-message");
            ValidationTracker tracker =
environment.peekRequired(ValidationTracker.class);
            markupWriter.write(tracker.getError(field));
            markupWriter.end();

        }
    }

The problem is that, for a field in error (i.e. required field that is
empty), when the label renders itself and call the beforeLabel() method, the
field is not considered as in error (inError(field) returns false).

I've checked and in the insideLabel() method, the field is in error but it's
too late to use markupwriter as the label is already rendered.

Finally I tried to manipulate DOM but it doesn't work too... (I'll
eventually post the corresponding code later but it's not the main point of
this mail).

So my question is : is there a way to recognize that the field is in error
in the beforeLabel() method?

Thanks in advance for help!

Thomas

Re: [T5.1]Add a field specific error message using beforeLabel

Posted by Thomas Cucchietti <th...@gmail.com>.
Thanks Geoff for the link, it's more or less what I wanted to do but I've
found a way to do what I want by manipulating DOM.

For information, in case it can help someone, here is the final HTML code I
wanted :

<div class="single-error-message">
  <p>The field must be 16 digits long</p>
  <p>
    <label for="testField" id="testField-label"> Test : </label>
    <input type="text" name="testField" id="testField" value="">
    <img src="/sips-pp-web/assets/tapestry/5.1.0.5/spacer.gif" alt="Cross
indicating that this form field is in error" class="t-error-icon"
id="testField:icon">
  </p>
</div>

I've created a custom ValidationDecorator and manage to obtain the code
above by overriding the insideLabel() method :

    @Override
    public void insideLabel(Field field, Element element)
    {
        if (field == null) return;

        if (inError(field)){
            //Label's container is retrieved
            Element parent = element.getContainer();

            //A new div is created into this container
            Element divElement =
parent.element("div","class","single-error-message");

            //The error message is retrieved and added to this new element
            ValidationTracker tracker =
environment.peekRequired(ValidationTracker.class);
            Element content = divElement.element("p");
            content.text(tracker.getError(field));

            //As the parent can't be moved into one of its children, we must
            //extract the child first
            divElement.moveBefore(parent);

            //Then, the field is added as the last child in order to be
displayed
            //after the error message. But as moveToBottom method cause
problems,
            //We finally use a workaround with two calls to moveToTop.
            parent.moveToTop(divElement);
            content.moveToTop(divElement);
        }
    }


I'm sure that a better way to do that exist but this one works (at least).

Thomas.

2010/7/13 Geoff Callender <ge...@gmail.com>

> Would this work for you? It uses css to show/hide the error message field.
>
>
> http://jumpstart.doublenegative.com.au/jumpstart/examples/input/novalidationbubbles1
>
> HTH,
>
> Geoff
>
> On 14/07/2010, at 2:53 AM, Thomas Cucchietti wrote:
>
> > Hi Pablo,
> >
> > Here is a link to the Thiago's message (using markmail) :
> >
> >
> http://markmail.org/message/ivb3ludzqg4zhzf3?q=T5+overriding+validationdecorator
> >
> > Thomas.
> >
> > 2010/7/13 Pablo dos Reis <pa...@gmail.com>
> >
> >> Hi Thomas,
> >>
> >> Do you still have the link to post of Thiago?
> >>
> >> I' m looking for the post, but I have not found yet.
> >>
> >>
> >> tks,
> >>
> >> 2010/7/13 Thomas Cucchietti <th...@gmail.com>
> >>
> >>> Nobody has an idea about this problem?
> >>>
> >>>
> >>> 2010/7/8 Thomas Cucchietti <th...@gmail.com>
> >>>
> >>>> Hi everybody!
> >>>>
> >>>> I'm facing a problem I can't resolve, even after hours of reflexion
> and
> >>>> tests so I'm asking for help :)
> >>>>
> >>>> Here is my need : I would like to display the error message
> >> corresponding
> >>>> to each field of my form just above the label of this field.
> >>>>
> >>>> I've made some research and have found a very interesting post of
> >> Thiago
> >>>> about custom ValidationDecorator.
> >>>>
> >>>> I created mine, added it to my AppModule and everything should be ok.
> >>>>
> >>>> Here is the specific part of my ValidationDecorator :
> >>>>
> >>>>    @Override
> >>>>    public void beforeLabel(Field field) {
> >>>>        if (inError(field)) {
> >>>>            markupWriter.element("div",
> >>>>                    "class", "single-error-message");
> >>>>            ValidationTracker tracker =
> >>>> environment.peekRequired(ValidationTracker.class);
> >>>>            markupWriter.write(tracker.getError(field));
> >>>>            markupWriter.end();
> >>>>
> >>>>        }
> >>>>    }
> >>>>
> >>>> The problem is that, for a field in error (i.e. required field that is
> >>>> empty), when the label renders itself and call the beforeLabel()
> >> method,
> >>> the
> >>>> field is not considered as in error (inError(field) returns false).
> >>>>
> >>>> I've checked and in the insideLabel() method, the field is in error
> but
> >>>> it's too late to use markupwriter as the label is already rendered.
> >>>>
> >>>> Finally I tried to manipulate DOM but it doesn't work too... (I'll
> >>>> eventually post the corresponding code later but it's not the main
> >> point
> >>> of
> >>>> this mail).
> >>>>
> >>>> So my question is : is there a way to recognize that the field is in
> >>> error
> >>>> in the beforeLabel() method?
> >>>>
> >>>> Thanks in advance for help!
> >>>>
> >>>> Thomas
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>
> >>
> >>
> >> --
> >> Pablo Henrique dos Reis
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

Re: [T5.1]Add a field specific error message using beforeLabel

Posted by Geoff Callender <ge...@gmail.com>.
Would this work for you? It uses css to show/hide the error message field.

	http://jumpstart.doublenegative.com.au/jumpstart/examples/input/novalidationbubbles1

HTH,

Geoff

On 14/07/2010, at 2:53 AM, Thomas Cucchietti wrote:

> Hi Pablo,
> 
> Here is a link to the Thiago's message (using markmail) :
> 
> http://markmail.org/message/ivb3ludzqg4zhzf3?q=T5+overriding+validationdecorator
> 
> Thomas.
> 
> 2010/7/13 Pablo dos Reis <pa...@gmail.com>
> 
>> Hi Thomas,
>> 
>> Do you still have the link to post of Thiago?
>> 
>> I' m looking for the post, but I have not found yet.
>> 
>> 
>> tks,
>> 
>> 2010/7/13 Thomas Cucchietti <th...@gmail.com>
>> 
>>> Nobody has an idea about this problem?
>>> 
>>> 
>>> 2010/7/8 Thomas Cucchietti <th...@gmail.com>
>>> 
>>>> Hi everybody!
>>>> 
>>>> I'm facing a problem I can't resolve, even after hours of reflexion and
>>>> tests so I'm asking for help :)
>>>> 
>>>> Here is my need : I would like to display the error message
>> corresponding
>>>> to each field of my form just above the label of this field.
>>>> 
>>>> I've made some research and have found a very interesting post of
>> Thiago
>>>> about custom ValidationDecorator.
>>>> 
>>>> I created mine, added it to my AppModule and everything should be ok.
>>>> 
>>>> Here is the specific part of my ValidationDecorator :
>>>> 
>>>>    @Override
>>>>    public void beforeLabel(Field field) {
>>>>        if (inError(field)) {
>>>>            markupWriter.element("div",
>>>>                    "class", "single-error-message");
>>>>            ValidationTracker tracker =
>>>> environment.peekRequired(ValidationTracker.class);
>>>>            markupWriter.write(tracker.getError(field));
>>>>            markupWriter.end();
>>>> 
>>>>        }
>>>>    }
>>>> 
>>>> The problem is that, for a field in error (i.e. required field that is
>>>> empty), when the label renders itself and call the beforeLabel()
>> method,
>>> the
>>>> field is not considered as in error (inError(field) returns false).
>>>> 
>>>> I've checked and in the insideLabel() method, the field is in error but
>>>> it's too late to use markupwriter as the label is already rendered.
>>>> 
>>>> Finally I tried to manipulate DOM but it doesn't work too... (I'll
>>>> eventually post the corresponding code later but it's not the main
>> point
>>> of
>>>> this mail).
>>>> 
>>>> So my question is : is there a way to recognize that the field is in
>>> error
>>>> in the beforeLabel() method?
>>>> 
>>>> Thanks in advance for help!
>>>> 
>>>> Thomas
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>> 
>> 
>> 
>> --
>> Pablo Henrique dos Reis
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: [T5.1]Add a field specific error message using beforeLabel

Posted by Thomas Cucchietti <th...@gmail.com>.
Hi Pablo,

Here is a link to the Thiago's message (using markmail) :

http://markmail.org/message/ivb3ludzqg4zhzf3?q=T5+overriding+validationdecorator

Thomas.

2010/7/13 Pablo dos Reis <pa...@gmail.com>

> Hi Thomas,
>
> Do you still have the link to post of Thiago?
>
> I' m looking for the post, but I have not found yet.
>
>
> tks,
>
> 2010/7/13 Thomas Cucchietti <th...@gmail.com>
>
> > Nobody has an idea about this problem?
> >
> >
> > 2010/7/8 Thomas Cucchietti <th...@gmail.com>
> >
> > > Hi everybody!
> > >
> > > I'm facing a problem I can't resolve, even after hours of reflexion and
> > > tests so I'm asking for help :)
> > >
> > > Here is my need : I would like to display the error message
> corresponding
> > > to each field of my form just above the label of this field.
> > >
> > > I've made some research and have found a very interesting post of
> Thiago
> > > about custom ValidationDecorator.
> > >
> > > I created mine, added it to my AppModule and everything should be ok.
> > >
> > > Here is the specific part of my ValidationDecorator :
> > >
> > >     @Override
> > >     public void beforeLabel(Field field) {
> > >         if (inError(field)) {
> > >             markupWriter.element("div",
> > >                     "class", "single-error-message");
> > >             ValidationTracker tracker =
> > > environment.peekRequired(ValidationTracker.class);
> > >             markupWriter.write(tracker.getError(field));
> > >             markupWriter.end();
> > >
> > >         }
> > >     }
> > >
> > > The problem is that, for a field in error (i.e. required field that is
> > > empty), when the label renders itself and call the beforeLabel()
> method,
> > the
> > > field is not considered as in error (inError(field) returns false).
> > >
> > > I've checked and in the insideLabel() method, the field is in error but
> > > it's too late to use markupwriter as the label is already rendered.
> > >
> > > Finally I tried to manipulate DOM but it doesn't work too... (I'll
> > > eventually post the corresponding code later but it's not the main
> point
> > of
> > > this mail).
> > >
> > > So my question is : is there a way to recognize that the field is in
> > error
> > > in the beforeLabel() method?
> > >
> > > Thanks in advance for help!
> > >
> > > Thomas
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> >
>
>
>
> --
> Pablo Henrique dos Reis
>

Re: [T5.1]Add a field specific error message using beforeLabel

Posted by Pablo dos Reis <pa...@gmail.com>.
Hi Thomas,

Do you still have the link to post of Thiago?

I' m looking for the post, but I have not found yet.


tks,

2010/7/13 Thomas Cucchietti <th...@gmail.com>

> Nobody has an idea about this problem?
>
>
> 2010/7/8 Thomas Cucchietti <th...@gmail.com>
>
> > Hi everybody!
> >
> > I'm facing a problem I can't resolve, even after hours of reflexion and
> > tests so I'm asking for help :)
> >
> > Here is my need : I would like to display the error message corresponding
> > to each field of my form just above the label of this field.
> >
> > I've made some research and have found a very interesting post of Thiago
> > about custom ValidationDecorator.
> >
> > I created mine, added it to my AppModule and everything should be ok.
> >
> > Here is the specific part of my ValidationDecorator :
> >
> >     @Override
> >     public void beforeLabel(Field field) {
> >         if (inError(field)) {
> >             markupWriter.element("div",
> >                     "class", "single-error-message");
> >             ValidationTracker tracker =
> > environment.peekRequired(ValidationTracker.class);
> >             markupWriter.write(tracker.getError(field));
> >             markupWriter.end();
> >
> >         }
> >     }
> >
> > The problem is that, for a field in error (i.e. required field that is
> > empty), when the label renders itself and call the beforeLabel() method,
> the
> > field is not considered as in error (inError(field) returns false).
> >
> > I've checked and in the insideLabel() method, the field is in error but
> > it's too late to use markupwriter as the label is already rendered.
> >
> > Finally I tried to manipulate DOM but it doesn't work too... (I'll
> > eventually post the corresponding code later but it's not the main point
> of
> > this mail).
> >
> > So my question is : is there a way to recognize that the field is in
> error
> > in the beforeLabel() method?
> >
> > Thanks in advance for help!
> >
> > Thomas
> >
> >
> >
> >
> >
> >
> >
> >
>



-- 
Pablo Henrique dos Reis

Re: [T5.1]Add a field specific error message using beforeLabel

Posted by Thomas Cucchietti <th...@gmail.com>.
Nobody has an idea about this problem?


2010/7/8 Thomas Cucchietti <th...@gmail.com>

> Hi everybody!
>
> I'm facing a problem I can't resolve, even after hours of reflexion and
> tests so I'm asking for help :)
>
> Here is my need : I would like to display the error message corresponding
> to each field of my form just above the label of this field.
>
> I've made some research and have found a very interesting post of Thiago
> about custom ValidationDecorator.
>
> I created mine, added it to my AppModule and everything should be ok.
>
> Here is the specific part of my ValidationDecorator :
>
>     @Override
>     public void beforeLabel(Field field) {
>         if (inError(field)) {
>             markupWriter.element("div",
>                     "class", "single-error-message");
>             ValidationTracker tracker =
> environment.peekRequired(ValidationTracker.class);
>             markupWriter.write(tracker.getError(field));
>             markupWriter.end();
>
>         }
>     }
>
> The problem is that, for a field in error (i.e. required field that is
> empty), when the label renders itself and call the beforeLabel() method, the
> field is not considered as in error (inError(field) returns false).
>
> I've checked and in the insideLabel() method, the field is in error but
> it's too late to use markupwriter as the label is already rendered.
>
> Finally I tried to manipulate DOM but it doesn't work too... (I'll
> eventually post the corresponding code later but it's not the main point of
> this mail).
>
> So my question is : is there a way to recognize that the field is in error
> in the beforeLabel() method?
>
> Thanks in advance for help!
>
> Thomas
>
>
>
>
>
>
>
>