No, it would definitely not ;). But as long as he uses session-persistence
for his rsvpList it should work, right?

> 
> I don't think that would be consistently unique beyond the 
> objects life.
> 
> On 1/27/06, Schulte Marcus <[EMAIL PROTECTED]> wrote:
> >
> > Hm, interesting problem. Now, your objects are equal but 
> they are not the
> > same. So, I guess, you could use a keyExpression parameter 
> referring to
> > the
> > objects' hashcode. In standard vm's, Object.hashCode() 
> returns different
> > values for different instances.
> >
> > so, I'd try:
> >
> > <div jwcid="@For" source="ognl:rsvpList" value="ognl:currentRsvp"
> > keyExpression="hashCode">
> >
> > would that workf for you?
> >
> > Marcus
> >
> > > -----Original Message-----
> > > From: Chris Conrad [mailto:[EMAIL PROTECTED]
> > > Sent: Thursday, January 26, 2006 9:49 PM
> > > To: Tapestry users
> > > Subject: Re: Non-intuitive behavior from the For component
> > >
> > >
> > > I think the problem here (and this is also in regards to using the
> > > keyProvider parameter and equals method) is I'm dealing 
> with a list
> > > of objects which are 100% legitimately equal to each other.  And
> > > that's really what I want.  I want the For component to 
> take a list
> > > of equal objects to render the page and then, during the rewind,
> > > update that list of objects according to their index in the list.
> > > When I start I have no identifying information about the list of
> > > objects, all I know is that I need x number of them.
> > >
> > > To try and explain in a different way ... if you look at the Form
> > > section of the Quick Start guide you can see the standard
> > > pattern for
> > > having a user fill in a form to create a new object.  In the Quick
> > > Start guide it's creating a new ProjectRelease.  So, as in the
> > > example, in your pageBeginRender you instantiate a blank
> > > ProjectRelease and when the form is submitted, the fields of the
> > > ProjectRelease are updated according to the values in the form.  I
> > > want to do the same thing but instead of creating a single
> > > ProjectRelease, I want to create a list of ProjectReleases.
> > >
> > > Does that help any?
> > >
> > > --Chris
> > >
> > > On Jan 26, 2006, at 12:36 PM, Jesse Kuhnert wrote:
> > >
> > > > Hmmm....But that only causes more confusion I'm afraid :(
> > > >
> > > > Ohhhhhh....I think what you are doing sort of sounds right,
> > > but you
> > > > still
> > > > can't expect the For component to be able to know the difference
> > > > between all
> > > > of your objects if the equals() method on them doesn't
> > > enforce some
> > > > sort of
> > > > uniqueness.
> > > >
> > > > Have you tried playing with the "match" parameter to For? I've
> > > > normally used
> > > > the "ListEdit" component for things like this in the past. Would
> > > > love to
> > > > hear if "match" or some of the other parameters solve 
> your problem.
> > > >
> > > > On 1/26/06, Chris Conrad <[EMAIL PROTECTED]> wrote:
> > > >>
> > > >> Sorry to reply twice, but I thought some code snippets 
> might make
> > > >> things clearer.  Here is what I do in my pageBeginRender:
> > > >>
> > > >>              rsvpList = new ArrayList<Rsvp>(numberAttending);
> > > >>
> > > >>              for (int i = 0; i < numberAttending; i++) {
> > > >>                  Rsvp rsvp = new Rsvp();
> > > >>                  rsvp.setId(i);
> > > >>                  rsvp.setAttending(true);
> > > >>
> > > >>                  rsvpList.add(i, rsvp);
> > > >>              }
> > > >>
> > > >>              setRsvpList(rsvpList);
> > > >>
> > > >> My listener method looks like:
> > > >>
> > > >>          // Reset the ids to 0
> > > >>          List<Rsvp> rsvpList = getRsvpList();
> > > >>          for (Rsvp rsvp : rsvpList) {
> > > >>              rsvp.setId(0);
> > > >>          }
> > > >>
> > > >>          getRsvpData().setRsvpList(rsvpList);
> > > >>
> > > >> And then in my HTML template I use it like this:
> > > >>
> > > >>          <div jwcid="@For" source="ognl:rsvpList"
> > > >> value="ognl:currentRsvp">
> > > >>              <div jwcid="@Any" element="div"
> > > >> class="ognl:evenOdd.next">
> > > >>                  <p class="floatLeft">
> > > >>                      <label jwcid="@FieldLabel"
> > > >> field="component:guestName">Guest's Name</label>
> > > >>                      <input jwcid="guestName" size="30"/>
> > > >>                  </p>
> > > >>
> > > >>                  <p class="floatLeft">
> > > >>                      <label jwcid="@FieldLabel"
> > > >> field="component:meal">Meal</label>
> > > >>                      <input jwcid="meal"/>
> > > >>                  </p>
> > > >>                  <br class="clear"/>
> > > >>              </div>
> > > >>
> > > >> The bit that bothers me is that in my pageBeginRender I
> > > need to do
> > > >> this:
> > > >>                  rsvp.setId(i);
> > > >>
> > > >> and in my listener I need to do this:
> > > >>
> > > >>          // Reset the ids to 0
> > > >>          List<Rsvp> rsvpList = getRsvpList();
> > > >>          for (Rsvp rsvp : rsvpList) {
> > > >>              rsvp.setId(0);
> > > >>          }
> > > >>
> > > >> I need to do that exclusively so that the For 
> component can update
> > > >> the List correctly.
> > > >>
> > > >> Hopefully that makes things a little clearer.
> > > >>
> > > >> --Chris
> > > >>
> > > >> On Jan 26, 2006, at 11:58 AM, Jesse Kuhnert wrote:
> > > >>
> > > >>> Hmmm. .
> > > >>>
> > > >>> I do these sort of things a lot, esp. with hibernate. 
> I've found
> > > >>> the For
> > > >>> component to incredibly useful, but maybe the 
> identification of
> > > >>> objects part
> > > >>> could be made more clear?
> > > >>>
> > > >>> I think the PropertySelectionModel problem could be 
> solved if you
> > > >>> used the
> > > >>> "BeanPropertySelectionModel"  class found in
> > > >>> http://tacos.sourceforge.netinstead. It makes turning 
> a list of
> > > >>> hibernate objects into the selection
> > > >>> model a one-line argument.
> > > >>>
> > > >>> Let me know if you try that and still find problems.
> > > >>>
> > > >>> On 1/26/06, Chris Conrad <[EMAIL PROTECTED]> wrote:
> > > >>>>
> > > >>>> Hello everyone,
> > > >>>>
> > > >>>> I'm working a tiny little RSVP for a friend.  While 
> doing so I
> > > >>>> found,
> > > >>>> what seems to me at least, a very non-intuitive result
> > > from the For
> > > >>>> component.  Basically the behavior I want is:
> > > >>>>
> > > >>>> 1. The user navigates to the RSVP page and is provided a
> > > drop down
> > > >>>> box to select the number of people who will be attending
> > > the event.
> > > >>>>
> > > >>>> 2. The user is given a list of text entry boxes (to enter the
> > > >>>> name of
> > > >>>> the guest) and drop downs (to select the meal the 
> guest wants).
> > > >>>>
> > > >>>> 1 was simple to accomplish though having to create a
> > > >>>> PropertySelectionModel is kinda a pain for something 
> this simple.
> > > >>>> Where things got hairy is 2.  Basically the code 
> flow is: in the
> > > >>>> listener for the form submit in #1, I grab the 
> number of guests
> > > >>>> attending and set that on the meal selection page.  The meal
> > > >>>> selection page's pageBeginRender creates a List of x 
> RSVP objects
> > > >>>> where x is the number of guests attending.  Then the
> > > meal selection
> > > >>>> page uses a For component to loop through the List of RSVP
> > > >>>> objects so
> > > >>>> that, in the first pass everything is blank and then
> > > when the guest
> > > >>>> submits, those RSVP objects in the List get filled 
> in with the
> > > >>>> details the guest entered.
> > > >>>>
> > > >>>> Now, what actually happened is the first RSVP object in
> > > the list is
> > > >>>> continually updated over and the others are never 
> touched.  When
> > > >>>> tracing through the For components code, it appears to
> > > be trying to
> > > >>>> match the serialized object saved in the form 
> against the ones
> > > >>>> in the
> > > >>>> List to "intelligently" pick which one to update.  But
> > > since all of
> > > >>>> the RSVP objects were the same to start with, and the
> > > For component
> > > >>>> doesn't update it's internal mapping after updating 
> an object, it
> > > >>>> just ignored everything in the list after the first 
> item.  Or, I
> > > >>>> guess more accurately, it continually matched the first
> > > item in the
> > > >>>> List and so it just repeatedly updated that one RSVP 
> object. To
> > > >>>> work
> > > >>>> around this, I needed to set the RSVP's id in the
> > > >>>> pageBeginRender to
> > > >>>> a different value for each RSVP object and then 
> reset them back
> > > >>>> to 0
> > > >>>> just before sending them to Hibernate to persist (if I
> > > don't reset
> > > >>>> them to 0, Hibernate things it's a detached object 
> and ends up
> > > >>>> updating a row instead of adding a new row).
> > > >>>>
> > > >>>> This work around seems very much like a hack to me.  Is
> > > there a way
> > > >>>> to make the For component do the right thing (i.e.
> > > actually iterate
> > > >>>> over the array when rewinding instead of assuming it 
> knows what
> > > >>>> it's
> > > >>>> doing)? I did try playing with the match parameter and that
> > > >>>> completely breaks everything, none of the objects in 
> the List get
> > > >>>> updated.  It seems that my use case isn't so terribly strange
> > > >>>> that it
> > > >>>> would be this difficult to accomplish in Tapestry.
> > > >>>>
> > > >>>> Thanks,
> > > >>>> --Chris
> > > >>>>
> > > >>>>
> > > 
> -------------------------------------------------------------------
> > > >>>> --
> > > >>>> To unsubscribe, e-mail: tapestry-user-
> > > >>>> [EMAIL PROTECTED]
> > > >>>> For additional commands, e-mail: tapestry-user-
> > > >>>> [EMAIL PROTECTED]
> > > >>>>
> > > >>>>
> > > >>
> > > >>
> > > >>
> > > 
> ---------------------------------------------------------------------
> > > >> To unsubscribe, e-mail:
> > > [EMAIL PROTECTED]
> > > >> For additional commands, e-mail: tapestry-user-
> > > >> [EMAIL PROTECTED]
> > > >>
> > > >>
> > >
> > >
> > > 
> ---------------------------------------------------------------------
> > > 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]
> >
> >
> 

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

Reply via email to