Tapestry's own loop component might give you some inspiration too http://tapestry.apache.org/5.3/apidocs/src-html/org/apache/tapestry5/corelib/components/Loop.html
On Monday, 2 April 2012, Lance Java <lance.j...@googlemail.com> wrote: > > Perhaps this diagram will help to debug http://tapestry.apache.org/component-rendering.html > > On Monday, 2 April 2012, Chris Mylonas <ch...@opencsta.org> wrote: >> Hi Tapestry List, >> >> After spending a few hours with render phases and all that comes with it (heartbeat/resources) I'm in a bit of a jam that I don't know where to go next. >> I'm setting up a basic component called PhoneView that receives an ArrayList of Phone objects...similar to the Tree example on the wiki [1] >> >> @CleanupRender & @BeforeRenderBody have the same code to make it easy for the beginner (me!) to see his progress... >> There are 2 items in the array list I have created using a BeanEditForm, so I presume I should see three lots of the div saying "CHRIS! This is your amazing test div - " with the render phase name. (2 x BeforeRenderBody) + (1 x CleanupRender). >> >> I'm not :( >> >> Running your eye over this code/template...can you help me? >> >> >> /** >> * Defines the source of the phones >> */ >> @Parameter(required = true) >> private ArrayList<Phone> source ; >> >> /** >> * Iterator to go over the source (Phone) elements >> */ >> private Iterator<Phone> iterator; >> >> /** >> * >> */ >> @Inject >> private ComponentResources resources ; >> >> /** >> * >> */ >> @Parameter >> private Phone currentPhone ; >> >> /** >> * >> */ >> @Parameter(defaultPrefix = BindingConstants.LITERAL) >> private Block empty; >> >> /** >> * >> */ >> @Environmental >> private Heartbeat heartbeat ; >> >> /** >> * @return >> */ >> @SetupRender >> boolean SetupRender(){ >> if( source == null ){ >> return false ; >> } >> this.iterator = source.iterator(); >> return (iterator.hasNext()); >> } >> >> @BeginRender >> void beginRender(){ >> currentPhone = iterator.next(); >> heartbeat.begin(); >> } >> >> @BeforeRenderBody >> void beforeRenderBody(MarkupWriter writer){ >> >> Element cur = writer.element("div", >> "class","userbackground").addClassName("adifferentbackground"); >> cur.text("CHRIS! This is your amazing test div - beforeRenderBody"); >> writer.end(); >> >> >> resources.renderInformalParameters(writer); >> } >> /** >> * @return >> */ >> @AfterRender >> boolean afterRender(){ >> heartbeat.end(); >> return (!iterator.hasNext()); >> } >> >> /** >> * @param writer >> */ >> @CleanupRender >> void cleanupRender(MarkupWriter writer){ >> Element cur = writer.element("div", >> "class","userbackground").addClassName("adifferentbackground"); >> cur.text("CHRIS! This is your amazing test div - cleanupRender"); >> writer.end(); >> } >> >> >> And the tml snippet from Index.tml >> >> <t:grid source="phones"/> >> <br/> >> <t:pagelink page="Phone/Create">Add Phone</t:pagelink> >> <br/> >> Chris 1 >> <br/> >> <t:PhoneView source="phones"/> >> <br/> >> Chris 2 >> >> >> >> Thanks >> Chris >> >> >> >> [1] = https://wiki.apache.org/tapestry/Tapestry5HowToCreateYourOwnComponents