Well, that was fun.  Sort of.

I did get it working by setting volatile="true" for the loop.  It did leave
me scratching my head wondering about the interactions of Persist and
volatile.

Odd.



> -----Original Message-----
> From: Andy Pahne [mailto:[EMAIL PROTECTED]
> Sent: Thursday, October 23, 2008 14:01
> To: Tapestry users
> Subject: Re: [T5] editing a looped list of objects' properties in a form
> 
> Jonathan Barker wrote:
> > Perhaps you could post your full template and class.  I don't see a
> submit
> > component so I question what else has been omitted.
> >
> > Jonathan
> >
> >
> 
> I omitted a few things that seemed unimportant to me. But here it is
> complete, only some names obfuscated...:
> 
> <t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd";
>           bodyID="template_inc.unterkuenfte"
>           features="none">
> 
> 
> 
>     <div id="inner_content">
> 
>     <div class="clearfix abstand15">
>         <div id="heading_plus_description">
>             <h2>${message:page-header}</h2>
>             <p>${message:intro}</p>
>         </div>
>     </div>
> 
> 
>     <!-- Show Error here -->
>     <t:if test="errorMessage">
>         <div class="error">
>             <span class="errorMessage">${errorMessage}</span>
>         </div>
>     </t:if>
> 
> 
>     <h3>${message:party-form}</h3>
> 
>     <form t:type="Form"
>           t:id="search_accommodation"
>           t:clientValidation="false"
>           t:autofocus="false">
> 
> 
>          <t:loop source="passengers" value="passenger">
> 
>                  <fieldset class="column first">
>                     <legend>${message:firstName-label}</legend>
>                     <input type="text"
>                            t:type="TextField"
>                            t:value="passenger.firstName"
>                            t:validate="required,minLength=2"
>                            t:id="firstName"/>
>                 </fieldset>
> 
> 
>                         <fieldset class="clear">
>             <legend class="hidden">clear</legend>
>         </fieldset>
> 
> 
>          </t:loop>
> 
> 
> 
>         <fieldset id="search_accommodation_submit_wrapper">
>             <legend>${message:legend-next-step}</legend>
>             <button
> id="search_accommodation_submit"><span>${message:next-
> step}</span></button>
>         </fieldset>
> 
>     </form>
> 
> 
> 
> 
> 
> </div>
> 
> 
> 
> 
> </t:layout>
> 
> 
> 
> 
> 
> /**
>  *  Copyright 2006-2008, Elmar Food
>  */
> package app.package.tb.web.pages.data;
> 
> import java.util.ArrayList;
> import java.util.List;
> 
> import app.package.bo.passenger.Passenger;
> import app.package.tb.web.base.ApplicationBasePage;
> 
> import org.apache.log4j.Logger;
> import org.apache.tapestry5.annotations.BeforeRenderTemplate;
> import org.apache.tapestry5.annotations.BeginRender;
> import org.apache.tapestry5.annotations.Persist;
> import org.apache.tapestry5.annotations.Property;
> 
> /**
>  *  collect names and ages of travellers
>  *
>  * @author elmarfood
>  */
> public class AcmePassengers extends ApplicationBasePage{
> 
>     /** log4j Logger */
>     @SuppressWarnings("unused")
>     private static final Logger LOG =
> Logger.getLogger(AcmePassengers.class);
> 
> 
>     @Property @Persist
>     private List<Passenger> passengers;
> 
>     @Property
>     private Passenger passenger;
> 
>     @BeforeRenderTemplate
>     public void initialize() {
> 
>         if(!getSearchOptionsExist()) {
>             // TODO error handling
>             throw new RuntimeException("no searchOptions");
>         }
> 
>         initPassengerList();
> 
>     }
> 
> 
>     private void initPassengerList() {
> 
>         int passengersTotal = getSearchOptions().getPassengersTotal();
> 
>         if(passengers == null) {
>             passengers = new ArrayList<Passenger>(passengersTotal);
>             for (int i = 0; i < passengersTotal; i++) {
>                 passengers.add(new Passenger());
>             }
>         }
> 
> 
>     }
> 
> 
>     public void onSuccess() {
> 
>         LOG.info("onSuccess()");
> 
>         int passengersTotal = getSearchOptions().getPassengersTotal();
> 
>         for (int i = 0; i < passengersTotal; i++) {
>             System.out.println("Passenger '"+i+"'" + ": " +
> passengers.get(i).getFirstName());
>         }
> 
>     }
> 
> 
> }
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to