You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Julian Wood <wo...@ucalgary.ca> on 2007/05/17 00:20:44 UTC

EventListener validateForm=false still submits form

I have a form:

     <component id="addBillableItemEventForm" type="Form">
         <binding name="delegate" value="bean:delegate"/>
         <binding name="clientValidationEnabled" value="true"/>
         <binding name="success" value="listener:addBillableItemEvent"/>
         <binding name="async" value="ognl:true"/>
         <binding name="updateComponents"  
value="{'weekScheduler_billable_row'}"/>
     </component>

     <component id="billableItem" type="PropertySelection">
         <binding name="displayName" value="literal:Billable Item"/>
         <binding name="model" value="ognl:billableItemSelectionModel"/>
         <binding name="value" value="ognl:billableItem"/>
         <binding name="validators" value="validators:required"/>
     </component>

And I have an eventlistener on billableItem:

     @EventListener(elements = "billableItem", events = "onchange",  
submitForm="addBillableItemEventForm", async=true, validateForm = false)

But when you change your billableItem selection, the form still  
validates (server side though). It also updates  
weekScheduler_billable_row, which I would prefer it not do, since the  
only reason I'm submitting this form is to get the selection value of  
billableItem. So it seems like the validation may be a bug, and the  
updateComponents should be overrideable somehow.

My workaround is to make another form which is populated with the  
value from billableItem when it changes, and to submit that using the  
event listener.

Thanks,

J

4.1.2-snap from today

--
Julian Wood <wo...@ucalgary.ca>

Software Engineer
Teaching & Learning Centre
University of Calgary

http://tlc.ucalgary.ca



Re: EventListener validateForm=false still submits form

Posted by Julian Wood <wo...@ucalgary.ca>.
I've submitted a bug report for this issue:

https://issues.apache.org/jira/browse/TAPESTRY-1495

Thanks,

J

On 18-May-07, at 5:21 PM, Julian Wood wrote:

> Hi Jesse, yes, it is a timesheets, billing, invoicing and reporting  
> system. Quite fun actually.
>
> Your suggestion about not updating the components unless necessary  
> was dead on. That took care of a lot of little problems which were  
> compounding on each other.
>
> I have one last issue though. I have several fields in this dojo  
> dialog (which is a custom component called AddBillableItem): a  
> property selection (ie. billableItem), an autocomplete (ie.  
> project) and some text fields (ie. quantity and total cost). Not  
> all of the text fields are needed, depending on what you choose as  
> a billableItem. The billableItem and the project are required. I  
> use an eventListener on billableItem to change around the text  
> fields. The component that updates is just an @Any div, which  
> surrounds those text field components previously mentioned. When it  
> updates however, the required validation is dropped from the  
> project autocomplete (even though this component is not updated by  
> the eventlistener).  This is what is sent by the eventlistener,  
> asynchronously:
>
> tapestry.form.registerProfile('addBillableItemEventForm', 
> {"required":["billableItem","quantity"],"billableItem":{"required": 
> ["You must enter a value for Billable Item."]},"quantity": 
> {"required":["You must enter a value for Quantity."]}});
>
> whereas on page load it was:
>
> tapestry.form.registerProfile('addBillableItemEventForm', 
> {"required":["billableItem","project"],"billableItem":{"required": 
> ["You must enter a value for Billable Item."]},"project": 
> {"required":["You must enter a value for Project."]}});
>
> Note that it is correct that Quantity was added (it's one of those  
> new fields) - I just don't know why Project was dropped.  
> billableItem was not updated either, and yet it's validation code  
> correctly remains intact. If I change Project to a  
> PropertySelection from an AutoComplete, the correct validation is  
> sent:
>
> tapestry.form.registerProfile('addBillableItemEventForm', 
> {"required":["billableItem","project","quantity"],"billableItem": 
> {"required":["You must enter a value for Billable  
> Item."]},"project":{"required":["You must enter a value for  
> Project."]},"quantity":{"required":["You must enter a value for  
> Quantity."]}});
>
> Bug?
>
> Thanks,
>
> J
>
>
> On 16-May-07, at 8:09 PM, Jesse Kuhnert wrote:
>
>> Your code looks like mine a couple of years ago only minus any ajax
>> support.  (sounds hospital / billing ish related )
>>
>> I agree about the server side validation being annoying and am in the
>> process of fixing it as it has just now annoyed me.
>>
>> The not updating your form async triggers I'm not as sure about.
>> Technically the form is being submitted so that is doing its  
>> job....Wouldn't
>> it be easier to remove the updateComponents parameter on the form  
>> (but leave
>> the async) and just conditionally update that billable_row if that
>> particular form submission was really to do some other work?
>>
>> Just thinking out loud. .
>>
>> On 5/16/07, Julian Wood <wo...@ucalgary.ca> wrote:
>>>
>>> I have a form:
>>>
>>>      <component id="addBillableItemEventForm" type="Form">
>>>          <binding name="delegate" value="bean:delegate"/>
>>>          <binding name="clientValidationEnabled" value="true"/>
>>>          <binding name="success"  
>>> value="listener:addBillableItemEvent"/>
>>>          <binding name="async" value="ognl:true"/>
>>>          <binding name="updateComponents"
>>> value="{'weekScheduler_billable_row'}"/>
>>>      </component>
>>>
>>>      <component id="billableItem" type="PropertySelection">
>>>          <binding name="displayName" value="literal:Billable Item"/>
>>>          <binding name="model"  
>>> value="ognl:billableItemSelectionModel"/>
>>>          <binding name="value" value="ognl:billableItem"/>
>>>          <binding name="validators" value="validators:required"/>
>>>      </component>
>>>
>>> And I have an eventlistener on billableItem:
>>>
>>>      @EventListener(elements = "billableItem", events = "onchange",
>>> submitForm="addBillableItemEventForm", async=true, validateForm =  
>>> false)
>>>
>>> But when you change your billableItem selection, the form still
>>> validates (server side though). It also updates
>>> weekScheduler_billable_row, which I would prefer it not do, since  
>>> the
>>> only reason I'm submitting this form is to get the selection  
>>> value of
>>> billableItem. So it seems like the validation may be a bug, and the
>>> updateComponents should be overrideable somehow.
>>>
>>> My workaround is to make another form which is populated with the
>>> value from billableItem when it changes, and to submit that using  
>>> the
>>> event listener.
>>>
>>> Thanks,
>>>
>>> J
>>>
>>> 4.1.2-snap from today
>>>

--
Julian Wood <wo...@ucalgary.ca>

Software Engineer
Teaching & Learning Centre
University of Calgary

http://tlc.ucalgary.ca



Re: EventListener validateForm=false still submits form

Posted by Julian Wood <wo...@ucalgary.ca>.
Hi Jesse, yes, it is a timesheets, billing, invoicing and reporting  
system. Quite fun actually.

Your suggestion about not updating the components unless necessary  
was dead on. That took care of a lot of little problems which were  
compounding on each other.

I have one last issue though. I have several fields in this dojo  
dialog (which is a custom component called AddBillableItem): a  
property selection (ie. billableItem), an autocomplete (ie. project)  
and some text fields (ie. quantity and total cost). Not all of the  
text fields are needed, depending on what you choose as a  
billableItem. The billableItem and the project are required. I use an  
eventListener on billableItem to change around the text fields. The  
component that updates is just an @Any div, which surrounds those  
text field components previously mentioned. When it updates however,  
the required validation is dropped from the project autocomplete  
(even though this component is not updated by the eventlistener).   
This is what is sent by the eventlistener, asynchronously:

tapestry.form.registerProfile('addBillableItemEventForm',{"required": 
["billableItem","quantity"],"billableItem":{"required":["You must  
enter a value for Billable Item."]},"quantity":{"required":["You must  
enter a value for Quantity."]}});

whereas on page load it was:

tapestry.form.registerProfile('addBillableItemEventForm',{"required": 
["billableItem","project"],"billableItem":{"required":["You must  
enter a value for Billable Item."]},"project":{"required":["You must  
enter a value for Project."]}});

Note that it is correct that Quantity was added (it's one of those  
new fields) - I just don't know why Project was dropped. billableItem  
was not updated either, and yet it's validation code correctly  
remains intact. If I change Project to a PropertySelection from an  
AutoComplete, the correct validation is sent:

tapestry.form.registerProfile('addBillableItemEventForm',{"required": 
["billableItem","project","quantity"],"billableItem":{"required": 
["You must enter a value for Billable Item."]},"project":{"required": 
["You must enter a value for Project."]},"quantity":{"required":["You  
must enter a value for Quantity."]}});

Bug?

Thanks,

J


On 16-May-07, at 8:09 PM, Jesse Kuhnert wrote:

> Your code looks like mine a couple of years ago only minus any ajax
> support.  (sounds hospital / billing ish related )
>
> I agree about the server side validation being annoying and am in the
> process of fixing it as it has just now annoyed me.
>
> The not updating your form async triggers I'm not as sure about.
> Technically the form is being submitted so that is doing its  
> job....Wouldn't
> it be easier to remove the updateComponents parameter on the form  
> (but leave
> the async) and just conditionally update that billable_row if that
> particular form submission was really to do some other work?
>
> Just thinking out loud. .
>
> On 5/16/07, Julian Wood <wo...@ucalgary.ca> wrote:
>>
>> I have a form:
>>
>>      <component id="addBillableItemEventForm" type="Form">
>>          <binding name="delegate" value="bean:delegate"/>
>>          <binding name="clientValidationEnabled" value="true"/>
>>          <binding name="success"  
>> value="listener:addBillableItemEvent"/>
>>          <binding name="async" value="ognl:true"/>
>>          <binding name="updateComponents"
>> value="{'weekScheduler_billable_row'}"/>
>>      </component>
>>
>>      <component id="billableItem" type="PropertySelection">
>>          <binding name="displayName" value="literal:Billable Item"/>
>>          <binding name="model"  
>> value="ognl:billableItemSelectionModel"/>
>>          <binding name="value" value="ognl:billableItem"/>
>>          <binding name="validators" value="validators:required"/>
>>      </component>
>>
>> And I have an eventlistener on billableItem:
>>
>>      @EventListener(elements = "billableItem", events = "onchange",
>> submitForm="addBillableItemEventForm", async=true, validateForm =  
>> false)
>>
>> But when you change your billableItem selection, the form still
>> validates (server side though). It also updates
>> weekScheduler_billable_row, which I would prefer it not do, since the
>> only reason I'm submitting this form is to get the selection value of
>> billableItem. So it seems like the validation may be a bug, and the
>> updateComponents should be overrideable somehow.
>>
>> My workaround is to make another form which is populated with the
>> value from billableItem when it changes, and to submit that using the
>> event listener.
>>
>> Thanks,
>>
>> J
>>
>> 4.1.2-snap from today
>>
>> --
>> Julian Wood <wo...@ucalgary.ca>
>>
>> Software Engineer
>> Teaching & Learning Centre
>> University of Calgary
>>
>> http://tlc.ucalgary.ca
>>
>>
>>
>
>
> -- 
> Jesse Kuhnert
> Tapestry/Dojo team member/developer
>
> Open source based consulting work centered around
> dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

--
Julian Wood <wo...@ucalgary.ca>

Software Engineer
Teaching & Learning Centre
University of Calgary

http://tlc.ucalgary.ca




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


Re: EventListener validateForm=false still submits form

Posted by Jesse Kuhnert <jk...@gmail.com>.
Your code looks like mine a couple of years ago only minus any ajax
support.  (sounds hospital / billing ish related )

I agree about the server side validation being annoying and am in the
process of fixing it as it has just now annoyed me.

The not updating your form async triggers I'm not as sure about.
Technically the form is being submitted so that is doing its job....Wouldn't
it be easier to remove the updateComponents parameter on the form (but leave
the async) and just conditionally update that billable_row if that
particular form submission was really to do some other work?

Just thinking out loud. .

On 5/16/07, Julian Wood <wo...@ucalgary.ca> wrote:
>
> I have a form:
>
>      <component id="addBillableItemEventForm" type="Form">
>          <binding name="delegate" value="bean:delegate"/>
>          <binding name="clientValidationEnabled" value="true"/>
>          <binding name="success" value="listener:addBillableItemEvent"/>
>          <binding name="async" value="ognl:true"/>
>          <binding name="updateComponents"
> value="{'weekScheduler_billable_row'}"/>
>      </component>
>
>      <component id="billableItem" type="PropertySelection">
>          <binding name="displayName" value="literal:Billable Item"/>
>          <binding name="model" value="ognl:billableItemSelectionModel"/>
>          <binding name="value" value="ognl:billableItem"/>
>          <binding name="validators" value="validators:required"/>
>      </component>
>
> And I have an eventlistener on billableItem:
>
>      @EventListener(elements = "billableItem", events = "onchange",
> submitForm="addBillableItemEventForm", async=true, validateForm = false)
>
> But when you change your billableItem selection, the form still
> validates (server side though). It also updates
> weekScheduler_billable_row, which I would prefer it not do, since the
> only reason I'm submitting this form is to get the selection value of
> billableItem. So it seems like the validation may be a bug, and the
> updateComponents should be overrideable somehow.
>
> My workaround is to make another form which is populated with the
> value from billableItem when it changes, and to submit that using the
> event listener.
>
> Thanks,
>
> J
>
> 4.1.2-snap from today
>
> --
> Julian Wood <wo...@ucalgary.ca>
>
> Software Engineer
> Teaching & Learning Centre
> University of Calgary
>
> http://tlc.ucalgary.ca
>
>
>


-- 
Jesse Kuhnert
Tapestry/Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com