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]

Reply via email to