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
