Yes, I am doing cross-field validation (e.g. quantity is required if another
property of the item has a certain value) and that's why it has to be done
in onValidateForm(), or at least that's what I think.

Benny

On Wed, Feb 2, 2011 at 10:32 AM, Thiago H. de Paula Figueiredo <
thiag...@gmail.com> wrote:

> Why don't you use onPrepareFromQuantity(Integer quantity) instead? Does
> this validation require other fields to be checked?
>
>
> On Wed, 02 Feb 2011 12:49:58 -0200, Benny Law <benny.mk....@gmail.com>
> wrote:
>
>  The following code illustrates what I am doing:
>>
>> <t:form t:id="form" ...>
>>    <t:loop source="items" value="item" ...>
>>        <t:textfield t:id="quantity" value="item.quantity" .../>
>>    </t:loop>
>> </t:form>
>>
>> @InjectComponent private Form form;
>> @InjectComponent private TextField quantity;
>> @Property private Item item;
>>
>> void onValidateForm() {
>>    for (Item i: getItems()) {
>>        if (...cross-field check...) {
>>            form.recordError( quantity, "Error message");
>>        }
>>    }
>> }
>>
>> What I find is that when I get to onValidateForm(), the injected quantity
>> field is always the last instance (the one bound to the last item). I need
>> a
>> way to get the instance that matches the current item in the for loop.
>>
>> Hope that clarifies my question. Thanks.
>>
>> Benny
>>
>>
>> On Wed, Feb 2, 2011 at 6:21 AM, Thiago H. de Paula Figueiredo <
>> thiag...@gmail.com> wrote:
>>
>>  On Wed, 02 Feb 2011 02:26:45 -0200, Benny Law <benny.mk....@gmail.com>
>>> wrote:
>>>
>>>  Hi,
>>>
>>>>
>>>>
>>> Hi!
>>>
>>>  I have a loop inside a form that renders a textfield and some other
>>>
>>>> controls. When I am doing cross field validations in the ValidateForm
>>>> event while iterating over a collection (the source of the loop), I
>>>> would
>>>> like to record error messages against the form with the field in error
>>>> to
>>>> get the
>>>> normal error highlighting. How can I get to the field in this case since
>>>> I
>>>> can't use normal injection?
>>>>
>>>>
>>> Why not? Even when inside a loop, you don't have more than one instance
>>> of
>>> a given component. Example:
>>>
>>> <t:loop ...>
>>>   <t:textfield t:id="title".../>
>>> </t:loop>
>>>
>>> You have only one instance of the TextField with t:id "title", regardless
>>> of the number of iterations.
>>>
>>> I don't know if this solves your problem, but at least I'm trying to help
>>> you figure it out. ;)
>>>
>>> --
>>> Thiago H. de Paula Figueiredo
>>> Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
>>> and instructor
>>> Owner, Ars Machina Tecnologia da Informação Ltda.
>>> http://www.arsmachina.com.br
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>
>>>
>>>
>
> --
> Thiago H. de Paula Figueiredo
> Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
> and instructor
> Owner, Ars Machina Tecnologia da Informação Ltda.
> Consultor, desenvolvedor e instrutor em Java, Tapestry e Hibernate
> Coordenador e professor da Especialização em Engenharia de Software com
> Ênfase em Java da Faculdade Pitágoras
>
> http://www.arsmachina.com.br
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to