sorry, I forgot the encoder for the AjaxFormLoop: public ValueEncoder<AjaxFormLoopEntityHolder<ContactDetail>> getContactDetailEncoder() { final LegalEntityService service = serviceProvider.getService(LegalEntityService.class); return new ValueEncoder<AjaxFormLoopEntityHolder<ContactDetail>>() {
public String toClient(AjaxFormLoopEntityHolder<ContactDetail> detail) { return detail.getKey().toString(); } public AjaxFormLoopEntityHolder<ContactDetail> toValue(String detailId) { AjaxFormLoopEntityHolder<ContactDetail> ret = null; Long detailKey = Long.parseLong(detailId); for(AjaxFormLoopEntityHolder<ContactDetail> holder : details) { if(detailKey.equals(holder.getKey())) { ret = holder; break; } } return ret; } }; } On Tue, Apr 28, 2009 at 6:45 PM, Joost Schouten (mailing lists) <joost...@jsportal.com> wrote: > Here is the code related to my AjaxFormLoop which works (besides a few > non T5 related persistance issues in my own code ;-) > > > > ******************* java file ************** > > �...@property > �...@persist > private List<AjaxFormLoopEntityHolder<ContactDetail>> details; > > �...@property > private AjaxFormLoopEntityHolder<ContactDetail> contactDetailRow; > > �...@component(id = "contactDetailsAjaxLoop", parameters = > {"source=details", > > "value=contactDetailRow", > > "addRow=block:addRowBlock", > > "encoder=contactDetailEncoder"}) > private AjaxFormLoop contactDetailsAjaxLoop; > > �...@component(id = "contactDetailForm", parameters = > {"zone=contactDetailsZone", "context=legalEntity.id"}) > private Form contactDetailForm; > > �...@component(id = "addRowLink", parameters = > {"context=legalEntity.id"}) > private AddRowLink addRowLink; > > > �...@component(id = "contactDetailsSubmit", parameters = > {"value=message:jsportal.controls.save"}) > private Submit contactDetailsSubmit; > > �...@inject > �...@property > private Block addRowBlock; > > �...@onevent(value=EventConstants.ADD_ROW) > private Object handleAddRow() throws Exception { > this.setEdit(true); > > ContactDetail contactDetail = new > ContactDetail(); > contactDetail.setState(State.ACTIVE); > AjaxFormLoopEntityHolder detail = new > AjaxFormLoopEntityHolder<ContactDetail>(contactDetail, true, 0 - > System.currentTimeMillis()); > details.add(detail); > > return detail; > } > > �...@onevent(value=EventConstants.REMOVE_ROW) > private void handleRemoveRow(AjaxFormLoopEntityHolder detail) throws > Exception{ > for(AjaxFormLoopEntityHolder<ContactDetail> > holder : details) { > if(detail.getKey() == holder.getKey()) > { > detail.setDeleted(true); > } > } > } > > �...@onevent(component = "contactDetailForm", value = > EventConstants.PREPARE_FOR_SUBMIT) > private void handleContactDetailPrepare(Long legalEntityId) > throws Exception { > loadLegalEntity(legalEntityId); > } > > private void loadLegalEntity(Long legalEntityId) throws > Exception { > LegalEntityService service = > serviceProvider.getService(LegalEntityService.class); > legalEntity = (LegalEntity) > service.get(LegalEntity.class, legalEntityId); > } > > �...@onevent(component = "contactDetailForm", value = > EventConstants.SUCCESS) > private Object handleContactDetailSave() throws Exception { > > //do the persisting > } > > > **************** AjaxFormLoopEntityHolder ****************** > > package com.joostschouten.common.http.tapestrybase.model; > > public class AjaxFormLoopEntityHolder<T> { > > private T entity; > private Long key; > private boolean newEntity = false; > private boolean deleted = false; > > public AjaxFormLoopEntityHolder(T entity, boolean newEntity, > Long key) { > this.entity = entity; > this.newEntity = newEntity; > this.key = key; > } > > public T getEntity() { > return entity; > } > > public void setEntity(T entity) { > this.entity = entity; > } > > public Long getKey() { > return key; > } > > public boolean isNew() { > return newEntity; > } > > public boolean setDeleted(boolean deleted) { > return this.deleted = deleted; > } > > public boolean isDeleted() { > return deleted; > } > > } > > > ******************* The tml file *********************** > > > <form t:id="contactDetailForm"> > > <div class="entityDetails"> > <div > t:id="contactDetailsAjaxLoop"> > <t:delegate > to="detailBlock"/> > </div> > > </div> > > <ol class="formControls"> > <li class="next"> > <input > t:id="contactDetailsSubmit" > t:value="message:jsportal.controls.save"/> > </li> > </ol> > > </form> > </t:block> > > <t:block t:id="detailBlock"> > <div t:id="loopContactDetail">the form > fields, in my case they > come from a seperate component</div> > </t:block> > > <t:block id="addRowBlock"> > <div class="formControls"> > <div class="next"> > <a > t:id="addRowLink">${message:components.entities.EntitiesContactDetails.addNewContactInfo}</a> > </div> > </div> > </t:block> > > I hope this is of use to you. > > Cheers, > Joost > > On Tue, Apr 28, 2009 at 6:15 PM, zack1403 <zack.mann...@gmail.com> wrote: >> >> Hmm, the jumpstart example you gave uses t:submitnotifier as well as all >> examples (even nightly docs). The example you gave is running on 5.0.18. >> You are sure that example works on upgrade to 5.1.0.2? Even at the simplest >> form I am still getting my exception. The simplest possible form I could >> get down to is in my first post (page, tml, and exception). This is >> happening application-wide once I upgraded so it must be something that has >> changed internal to tapestry. Is there a new way to use AjaxFormLoop that I >> am missing. Does onAddRow still return an Object? >> >> Zack >> >> >> Joost Schouten (mailing lists) wrote: >>> >>> The example at >>> http://jumpstart.doublenegative.com.au:8080/jumpstart/examples/tables/ajaxformloop1 >>> which I used as a guide worked well for me on 5.1.0.3. >>> >>> In your examples you use the t:submitnotifier. I never really used it >>> but maybe you do some DOM alterations in those event methods that >>> Tapestry doesn't like. >>> >>> Cheers, >>> Joost >>> >>> On Tue, Apr 28, 2009 at 3:59 PM, zack1403 <zack.mann...@gmail.com> wrote: >>>> >>>> Hey I hate to bump but this is a huge blocker for me. Is there more >>>> information I can give to try and help troubleshoot?? >>>> >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/AjaxFormLoop-Exception-on-5.1.0.2-upgrade-tp23175801p23269752.html >>>> Sent from the Tapestry - User mailing list archive at Nabble.com. >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/AjaxFormLoop-Exception-on-5.1.0.2-upgrade-tp23175801p23270804.html >> Sent from the Tapestry - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org