Thanks Joost! While I'm sorting through that to find out what youre doing
that I am missing, here is a question.  When my onAddRow event is throwing
an exception, shouldn't the transaction be rolled back? I would think that
is expected behavior but the transaction is being committed. When I refresh
the page the row is there. Is there a reason that isnt consistent with the
rest of tapestry transactions?

Zack


Joost Schouten (mailing lists) wrote:
> 
> 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">
>>                                                        
>> ${message:components.entities.EntitiesContactDetails.addNewContactInfo} 
>>                                                </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
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/AjaxFormLoop-Exception-on-5.1.0.2-upgrade-tp23175801p23271251.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

Reply via email to