I've tried the For component and it has the same behaviour. Anyone any idea's?
Wouter On 9/9/05, Wouter De Vaal <[EMAIL PROTECTED]> wrote: > I'll try that. > A remark though: the apidoc doesn't show anything about Foreach being > deprecated. > > Wouter > > On 9/9/05, Ron Piterman <[EMAIL PROTECTED]> wrote: > > Am not sure if it will solve your problem, but Foreach is deprecated. > > Try using For instead, may be it will work... > > > > > > > > Wouter De Vaal: > > > Hi, > > > > > > I have a strange problem with a foreach component within a block that > > > only gets called once, but the block renders multiple times. This code > > > worked in tapestry 3, but gives an overflow in tapestry 4 beta 6, > > > because the foreach source doesn't get reevaluated I think. > > > > > > Regards, > > > Wouter > > > > > > PS: I've created a skeleton test page/class to test it: > > > > > > html: > > > <html> > > > <body> > > > <comp jwcid="@RenderBlock" block="ognl:components.subMenuItems"/> > > > <comp jwcid="[EMAIL PROTECTED]"> > > > Blah:<br/> > > > <comp jwcid="@Foreach" source="ognl:menuItems" > > > value="ognl:menuItem"> > > > <comp jwcid="@Insert" value="ognl:menuName"/><br/> > > > <comp jwcid="@Conditional" > > > condition="ognl:hasAvailableSubItems"> > > > <comp jwcid="@Insert" value="ognl:test"/> > > > <comp jwcid="@RenderBlock" > > > block="ognl:components.subMenuItems"/> > > > </comp> > > > </comp> > > > </comp> > > > </body> > > > </html> > > > > > > Page file: > > > <?xml version="1.0" encoding="UTF-8"?> > > > <!DOCTYPE page-specification PUBLIC > > > "-//Apache Software Foundation//Tapestry Specification 4.0//EN" > > > "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd"> > > > <page-specification class="EditMenuItemTest"> > > > > > > </page-specification> > > > > > > Java class: > > > import java.util.ArrayList; > > > import java.util.List; > > > > > > import org.apache.tapestry.event.PageBeginRenderListener; > > > import org.apache.tapestry.event.PageEvent; > > > import org.apache.tapestry.html.BasePage; > > > > > > public abstract class EditMenuItemTest extends BasePage implements > > > PageBeginRenderListener { > > > > > > public class MenuItem { > > > > > > private String name; > > > private List<MenuItem> subItems = new ArrayList<MenuItem>(); > > > > > > public MenuItem(String name) { > > > this.name = name; > > > } > > > > > > public List<MenuItem> getSubItems() { > > > return subItems; > > > } > > > > > > public void setSubItems(List<MenuItem> subItems) { > > > this.subItems = subItems; > > > } > > > > > > public String getName() { > > > return name; > > > } > > > > > > @Override > > > public String toString() { > > > return name; > > > } > > > > > > } > > > > > > public void pageBeginRender(PageEvent evt) { > > > // create some menu items > > > MenuItem root = new MenuItem("root"); > > > MenuItem a = new MenuItem("a"); > > > MenuItem b = new MenuItem("b"); > > > MenuItem c = new MenuItem("c"); > > > MenuItem aa = new MenuItem("aa"); > > > MenuItem ab = new MenuItem("ab"); > > > MenuItem ac = new MenuItem("ac"); > > > MenuItem aba = new MenuItem("aba"); > > > MenuItem abb = new MenuItem("abb"); > > > root.getSubItems().add(a); > > > root.getSubItems().add(b); > > > root.getSubItems().add(c); > > > c.getSubItems().add(aa); > > > c.getSubItems().add(ab); > > > c.getSubItems().add(ac); > > > ab.getSubItems().add(aba); > > > ab.getSubItems().add(abb); > > > setRootMenuItem(root); > > > } > > > > > > public abstract MenuItem getRootMenuItem(); > > > > > > public abstract void setRootMenuItem(MenuItem root); > > > > > > public abstract MenuItem getMenuItem(); > > > > > > public List<MenuItem> getMenuItems() { > > > if (getMenuItem() == null) { > > > System.out.println("get menu items with null called, > > > returning: " + getRootMenuItem().getSubItems()); > > > return getRootMenuItem().getSubItems(); > > > } else { > > > System.out.println("get menu items called, returning: " + > > > getMenuItem().getSubItems()); > > > return getMenuItem().getSubItems(); > > > } > > > } > > > > > > public String getMenuName() { > > > System.out.println("get menu name called, current menu item: " > > > + getMenuItem()); > > > return getMenuItem().getName(); > > > } > > > > > > public String getTest() { > > > System.out.println("test called, current menu item: " + > > > getMenuItem()); > > > return ""; > > > } > > > > > > public boolean isHasAvailableSubItems() { > > > System.out.println("available:" + getMenuItem().getSubItems()); > > > return (getMenuItem().getSubItems().size() > 0); > > > } > > > } > > > > > > --------------------------------------------------------------------- > > > 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]