You really don't need to @Persist anything here. Joachim was right with the context parameter. If you change your component class and template along the following lines it works fine:
Component class: public class Test { @Parameter @Property private String usage; @Property private String display; @Inject private Block refreshBlock; Object onActionFromClick(String context) { display = context; return refreshBlock; } } Component template: <div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> <t:block t:id="refreshBlock"> ${display} </t:block> <t:actionlink t:id="click" t:zone="refreshZone" context="usage"> Click me! </t:actionlink> <br/> </div> 2009/3/26 ahingsaka samsenesena <asamsenes...@sharengo.org> > Thanks for the answer, and sorry for the duplicated mails (our mail > server has problems), > > This solution works well, but I really can't see why the behaviour is > different : the actionlink is the same in the 2 situations explained > below. > > Or does it simply mean that we should not use persisting attributes in > components when there is a loop ? > > Kind regards, > Ahingsaka > > Le jeudi 26 mars 2009 à 15:27 +0100, Joachim Van der Auwera a écrit : > > You should pass the "usage" string as context parameter on the action > link. > > The problem is that the url for each of the events in the loop are the > same. > > > > Kind regards, > > Joachim > > > > ahingsaka samsenesena wrote: > > > Hi, > > > > > > I'm trying to use my own component inside a loop and I have a problem > > > when there is a "persist" annotation on attributes. > > > > > > I want to loop with my component named "test" in a page like this : > > > > > > <t:zone t:id="refreshZone"/> > > > > > > <t:loop source="0..2" value="testId"> > > > <t:test usage="${usage}"/> > > > </t:loop> > > > > > > The component contains a string attribute "usageValue" that will be > > > displayed in the refreshZone. > > > This attribute comes from the parameter "usage". I put my value on the > > > setupRender method. > > > > > > The class of the component is like this : > > > public class Test { > > > > > > @Parameter > > > private String usage; > > > > > > @Persist > > > @Property > > > private String usageValue; > > > > > > @Inject > > > private Block refreshBlock; > > > > > > boolean setupRender(MarkupWriter writer) { > > > this.usageValue = usage; > > > return true; > > > } > > > > > > Object onActionFromClick() { > > > return refreshBlock; > > > } > > > } > > > > > > And the tml : > > > <t:block t:id="refreshBlock"> > > > ${usageValue} > > > </t:block> > > > > > > <t:actionlink t:id="click" t:zone="refreshZone">Click > > > me</t:actionlink><br/> > > > > > > The controller of the page is quite simple and returns an usage for a > > > given number > > > public class ContentTest { > > > > > > @Property > > > private int testId; > > > > > > public String getUsage() { > > > if (testId == 0) { > > > return "pix"; > > > } else if (testId == 1) { > > > return "zoom"; > > > } else if (testId == 2) { > > > return "thumb"; > > > } else > > > return ""; > > > > > > } > > > } > > > > > > Here is the problem : when I click on the link, the value displayed is > > > always "thumb" ! > > > I should have "pix" displayed with the first link, "zoom" with the > > > second ... > > > > > > I tried to put an id, but the behaviour is the same : > > > <t:loop source="0..2" value="testId"> > > > <t:test t:id="testId" usage="${usage}"/> > > > </t:loop> > > > > > > And if I don't use the loop, there is no problem : > > > <t:zone t:id="refreshZone"/> > > > <t:test usage="literal:pix"> > > > </t:test> > > > <t:test usage="literal:zoom"> > > > </t:test> > > > <t:test usage="literal:thumb"> > > > </t:test> > > > > > > If I use these lines, i have the right behaviour. > > > > > > What's going on ? > > > > > > Ahingsaka SAMSENESENA > > > > > > > > > --------------------------------------------------------------------- > > > 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 > >