Ok, I'll take that approach then. 

Just for the record. This used to work in tapestry 3.

Wouter


On 9/10/05, Ron Piterman <[EMAIL PROTECTED]> wrote:
> Hi,
> I looked at your code -
> it seems you try to render the same block recursivley. This will work
> only in really stateless components.
> I will assume the For component is not stateless - you can not
> recusivley render it from within the component itself because it will
> get "confused". Its similar to thread-saftyness - you can not use the
> same component from two threads, and you can not invoke the
> renderComponent method again from within the renderComponent.
> 
> Instead, use a component which iterates through your tree from java and
> renders its body for each node.
> 
> Cheers,
> Ron
> 
> 
> 
> 
> 
>   Wouter De Vaal:
> > 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]
> >
> >
> 
> 
> ---------------------------------------------------------------------
> 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