Thanks Andy.

Adding the "ensureUniqueNamesInLoops" parameter to the AjaxForm would
be a nice solution, though IMHO the default should be "true".

is there any other way to ensure the names are unique, other than
using the IdPath ?  (to avoid the huge names)

-Chaitanya

On 9/18/06, andyhot <[EMAIL PROTECTED]> wrote:
> Ok, here's some code... First, the custom component:
> https://svn.sourceforge.net/svnroot/tacos/tacos-4.0/trunk/demo/docroot/WEB-INF/bugs/components/CustomTextField.html
> notice that you *have* to use id="ognl:components.ctf.idPath" to make it
> unique.
>
> Next, the page that uses it:
> https://svn.sourceforge.net/svnroot/tacos/tacos-4.0/trunk/demo/docroot/WEB-INF/bugs/BugTry004.html
> https://svn.sourceforge.net/svnroot/tacos/tacos-4.0/trunk/demo/src/net/sf/tacos/demo/pages/bugs/BugTry004.java
>
> It's a full working example, doing exactly what you describe.
>
> Well, running it produces the issue with the names that you describe.
> Names are ctf, ctf_0 (for the phones) and ctf_1, ctf_2 (for the emails)
> and when a new phone is added they become ctf, ctf_0,ctf_1(for the
> phones) while emails are left untouched (ctf_1, ctf_2)
>
> There are workarounds (like refreshing the complete form, or other parts
> that we know are affected by the current change) but if we could
> have really unique names (as we do for ids, using the idPath) it would
> be even better.
>
> The answer is in AjaxForm's getElementId(IFormComponent)
> https://svn.sourceforge.net/svnroot/tacos/tacos-4.0/trunk/src/java/net/sf/tacos/ajax/components/AjaxForm.java
> Making it
> return formSupport.getElementId(component, component.getIdPath());
> instead of
> return formSupport.getElementId(component, component.getId()); does the
> trick.
>
> Names are now: bugs_components_CustomTextField.ctf,
> bugs_components_CustomTextField.ctf_0 and
> bugs_components_CustomTextField_0.ctf,
> bugs_components_CustomTextField_0.ctf_0
>
> Ofcourse, I don't like the huge names, so I'm considering adding a
> parameter to AjaxForm for this,
> something like ensureUniqueNamesInLoops, defaulting to false.
>
> Any thoughts?
>
>
> Chaitanya Jeerage wrote:
> > Let me try to rephrase, we have two instances of the same custom
> > component in the page, Initially when the page is rendered we have one
> > TextField in each instance of the component (Telephone and email) .
> > Tapestry assigns a name for each of the TextField, say TextField_0 and
> > TextField_1.
> >
> > Now on addition of new telephone (through ajaxEventSubmit) only the
> > telephone component is updated (as required), we have two TextFields
> > in telephone and one in email (Note email component was not updated).
> >
> > For the newly added TextField Tapestry assigns the name "TextField_1"
> > , the name is same as the TextField in email.
> >
> > On form submission, because of two fields having the same name
> > "TextField_1" the data is getting mixed up.
> >
> > -Chaitanya
> >
> > On 9/14/06, andyhot <[EMAIL PROTECTED]> wrote:
> >
> >> B.S.Navin wrote:
> >>
> >>> Looking at the original post, it looks like the person wants a unique
> >>> "name" attribute.
> >>>
> >>>
> >> errr... i thought he couldn't refresh the specific part... my mistake
> >>
> >>> But Andy's solution will provide a unique "id" attribute. (As "name"
> >>> is a reserved parameter in TextField, and is calculated using the
> >>> components original ID - not the bound id).
> >>>
> >>> So I feel that, even though the ID is unique, the name still can
> >>> conflict and result in the the data being clobbered - as HTML form
> >>> submission uses the "name" attribute, rather than the "id" attribute.
> >>>
> >>>
> >> Even if that's the case, why is it problematic to have controls with the
> >> same name?
> >> I believe Tapestry handles them correctly
> >>
> >>> On 14-Sep-06, at 11:48 AM, andyhot wrote:
> >>>
> >>>
> >>>
> >>>> Here's a trick that some tacos components use to get past this issue.
> >>>>
> >>>> in your CustomField.jwc
> >>>>
> >>>> <component id="myTextField" type="TextField" inherit-informal-
> >>>> parameters="yes">
> >>>>         <binding name="id" value="components.myTextField.idPath"/>
> >>>>         <binding name="name" value="name"/>
> >>>> </component>
> >>>>
> >>>>
> >>>> ognl:components.tableSection.idPath
> >>>>
> >>>> Chaitanya Jeerage wrote:
> >>>>
> >>>>
> >>>>> Issue: Data *wrongly* getting updated due to Tapestry/Tacos handling
> >>>>> of Textfield Name convention when it is embedded within a custom
> >>>>> component.
> >>>>>
> >>>>> When we use a Custom component which has a Text Field in it, we can
> >>>>> end up with two TextFields with the **SAME NAME** after an
> >>>>> AjaxEventSubmit call.
> >>>>>
> >>>>> So let's say we have:
> >>>>>
> >>>>> <span jwcid="[EMAIL PROTECTED]" source="ognl:telephones"
> >>>>> value="ognl:currentTelephone">
> >>>>>    <input jwcid="[EMAIL PROTECTED]:customField"
> >>>>> value="ognl:currentTelephone.number"/>
> >>>>> </span>
> >>>>>
> >>>>> <span jwcid="[EMAIL PROTECTED]" source="ognl:emails"
> >>>>> value="ognl:currentTelephone">
> >>>>>    <input jwcid="[EMAIL PROTECTED]:customField"
> >>>>> value="ognl:currentEmail.email"/>
> >>>>> </span>
> >>>>>
> >>>>> The "customField" component has a embedded "TextField"
> >>>>>
> >>>>> The custom component looks like this:
> >>>>>
> >>>>> CustomField.jwc partial code
> >>>>>
> >>>>>     <component id="TextField" type="TextField"
> >>>>> inherit-informal-parameters="yes">
> >>>>>         <binding name="id" value="id"/>
> >>>>>         <binding name="name" value="name"/>
> >>>>>     </component>
> >>>>>
> >>>>>
> >>>>> So when the Page is initially rendered, the TextFields come with
> >>>>> Names
> >>>>> as "TextField_0", "TextField_1" etc.  NOTE however that there is no
> >>>>> distinguishing by naming convention which TextField "belongs" to
> >>>>> which
> >>>>> component, via naming convention.   The reason for TextField_0 seems
> >>>>> to be because of the JWCID in the CustomField.jwc
> >>>>>
> >>>>> Now when we have an Ajax call to add a Telephone number to the
> >>>>> Telephone List the clash occurs!  Since add to the Telephone list
> >>>>> creates a new TextField_xx, it clashes with the Emails because we're
> >>>>> doing a partial refresh of the Telephone List portion using Ajax.
> >>>>>
> >>>>> On form submit we can get some Telephone data into Email fields!!
> >>>>>
> >>>>> However, in the same scenario, if we directly use a "TextField"
> >>>>> instead of the custom component, for ex
> >>>>>
> >>>>> <span jwcid="[EMAIL PROTECTED]" source="ognl:telephones"
> >>>>> value="ognl:currentTelephone">
> >>>>>    <input jwcid="[EMAIL PROTECTED]"
> >>>>> value="ognl:currentTelephone.number"/>
> >>>>> </span>
> >>>>>
> >>>>> on addition of rows to the "telephones" list,  new input text fields
> >>>>> are added to the screen and the name generated are like  "tele",
> >>>>> "tele_0", "tele_1" , Note, here it is using the jwcid value and so
> >>>>> works fine!!
> >>>>>
> >>>>> If TextField could "inherit" it's name from its enclosing component,
> >>>>> we would not have any issues!!
> >>>>>
> >>>>> Any pointers please?!
> >>>>>
> >>>>> thanks
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> ----
> >>>>> Using Tomcat but need to do more? Need to support web services,
> >>>>> security?
> >>>>> Get stuff done quickly with pre-integrated technology to make your
> >>>>> job easier
> >>>>> Download IBM WebSphere Application Server v.1.0.1 based on Apache
> >>>>> Geronimo
> >>>>> http://sel.as-us.falkag.net/sel?
> >>>>> cmd=lnk&kid=120709&bid=263057&dat=121642
> >>>>> _______________________________________________
> >>>>> Tacos-devel mailing list
> >>>>> [email protected]
> >>>>> https://lists.sourceforge.net/lists/listinfo/tacos-devel
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> --
> >>>> Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr
> >>>> Tapestry / Tacos developer
> >>>> Open Source / J2EE Consulting
> >>>>
> >>>>
> >>>> ----------------------------------------------------------------------
> >>>> ---
> >>>> Using Tomcat but need to do more? Need to support web services,
> >>>> security?
> >>>> Get stuff done quickly with pre-integrated technology to make your
> >>>> job easier
> >>>> Download IBM WebSphere Application Server v.1.0.1 based on Apache
> >>>> Geronimo
> >>>> http://sel.as-us.falkag.net/sel?
> >>>> cmd=lnk&kid=120709&bid=263057&dat=121642
> >>>> _______________________________________________
> >>>> Tacos-devel mailing list
> >>>> [email protected]
> >>>> https://lists.sourceforge.net/lists/listinfo/tacos-devel
> >>>>
> >>>>
> >>>>
> >>> -------------------------------------------------------------------------
> >>> Using Tomcat but need to do more? Need to support web services, security?
> >>> Get stuff done quickly with pre-integrated technology to make your job 
> >>> easier
> >>> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> >>> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> >>> _______________________________________________
> >>> Tacos-devel mailing list
> >>> [email protected]
> >>> https://lists.sourceforge.net/lists/listinfo/tacos-devel
> >>>
> >>>
> >>>
> >> --
> >> Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr
> >> Tapestry / Tacos developer
> >> Open Source / J2EE Consulting
> >>
> >>
> >> -------------------------------------------------------------------------
> >> Using Tomcat but need to do more? Need to support web services, security?
> >> Get stuff done quickly with pre-integrated technology to make your job 
> >> easier
> >> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> >> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> >> _______________________________________________
> >> Tacos-devel mailing list
> >> [email protected]
> >> https://lists.sourceforge.net/lists/listinfo/tacos-devel
> >>
> >>
> >
> > -------------------------------------------------------------------------
> > Using Tomcat but need to do more? Need to support web services, security?
> > Get stuff done quickly with pre-integrated technology to make your job 
> > easier
> > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> > _______________________________________________
> > Tacos-devel mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/tacos-devel
> >
> >
>
>
> --
> Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr
> Tapestry / Tacos developer
> Open Source / J2EE Consulting
>
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Tacos-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/tacos-devel
>

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Tacos-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tacos-devel

Reply via email to