Tree can be viewed as an example of how to construct a recursive structure
using Blocks/ RenderCommands, understanding the render queue may require a
little reading/experimentation, but the advantage of this approach is that
it allows you to use the normal tapestry components for creating your
markup (opposed to simply building and returning a HTML string, which would
most likely end in a maintenance nightmare pretty fast)

-- 
Chris

On Mon, Mar 21, 2016 at 5:02 AM, Qbyte Consulting <qbyteconsult...@gmail.com
> wrote:

> ok ignore that, bumped into some tapestry4 source
>
> would this be the approach?
>
>               JSONObject
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-json/5.3.1/org/apache/tapestry5/json/JSONObject.java#JSONObject
> >
> spec = new JSONObject
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-json/5.3.1/org/apache/tapestry5/json/JSONObject.java#JSONObject
> >("clientId",
> clientId);
>
> 171 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#171
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
> 172 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#172
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                 e.attribute
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/dom/Element.java#Element.attribute%28java.lang.String%2Cjava.lang.String%29
> >("id",
> clientId);
>
> 173 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#173
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
> 174 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#174
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                 spec.put
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-json/5.3.1/org/apache/tapestry5/json/JSONObject.java#JSONObject.put%28java.lang.String%2Cjava.lang.Object%29
> >("leaf",
> node.isLeaf <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/tree/TreeNode.java#TreeNode.isLeaf%28%29
> >());
>
> 175 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#175
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
> 176 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#176
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                 if (hasChildren)
>
> 177 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#177
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                 {
>
> 178 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#178
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                     Link
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/Link.java#Link
> >
> expandChildren = resources
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#Tree.0resources
> >.createEventLink
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/ComponentResourcesCommon.java#ComponentResourcesCommon.createEventLink%28java.lang.String%2Cjava.lang.Object%5B%5D%29
> >("expandChildren",
> node.getId <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/tree/TreeNode.java#TreeNode.getId%28%29
> >());
>
> 179 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#179
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                     Link
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/Link.java#Link
> >
> markExpanded = resources
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#Tree.0resources
> >.createEventLink
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/ComponentResourcesCommon.java#ComponentResourcesCommon.createEventLink%28java.lang.String%2Cjava.lang.Object%5B%5D%29
> >("markExpanded",
> node.getId <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/tree/TreeNode.java#TreeNode.getId%28%29
> >());
>
> 180 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#180
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                     Link
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/Link.java#Link
> >
> markCollapsed = resources
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#Tree.0resources
> >.createEventLink
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/ComponentResourcesCommon.java#ComponentResourcesCommon.createEventLink%28java.lang.String%2Cjava.lang.Object%5B%5D%29
> >("markCollapsed",
> node.getId <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/tree/TreeNode.java#TreeNode.getId%28%29
> >());
>
> 181 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#181
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
> 182 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#182
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                     spec.put
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-json/5.3.1/org/apache/tapestry5/json/JSONObject.java#JSONObject.put%28java.lang.String%2Cjava.lang.Object%29
> >("expandChildrenURL",
> expandChildren.toString
> <
> http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Object.java#Object.toString%28%29
> >())
>
> 183 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#183
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                             .put
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-json/5.3.1/org/apache/tapestry5/json/JSONObject.java#JSONObject.put%28java.lang.String%2Cjava.lang.Object%29
> >("markExpandedURL",
> markExpanded.toString
> <
> http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Object.java#Object.toString%28%29
> >())
>
> 184 <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#184
> >
>
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-core/5.3.1/org/apache/tapestry5/corelib/components/Tree.java#
> >
>
>                             .put
> <
> http://grepcode.com/file/repo1.maven.org/maven2/org.apache.tapestry/tapestry-json/5.3.1/org/apache/tapestry5/json/JSONObject.java#JSONObject.put%28java.lang.String%2Cjava.lang.Object%29
> >("markCollapsedURL",
> markCollapsed.toString
> <
> http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/lang/Object.java#Object.toString%28%29
> >());
>
>
> On Mon, Mar 21, 2016 at 10:47 AM, Qbyte Consulting <
> qbyteconsult...@gmail.com> wrote:
>
> > Tree uses BaseComponent that doesn't seem to be in tapestry5?
> >
> > On Fri, Mar 18, 2016 at 2:15 PM, Chris Poulsen <mailingl...@nesluop.dk>
> > wrote:
> >
> >> Hi,
> >>
> >> Take a look at the Tapestry Tree component to see how recursive
> rendering
> >> can be done.
> >>
> >> --
> >> Chris
> >>
> >> On Fri, Mar 18, 2016 at 6:17 AM, Qbyte Consulting <
> >> qbyteconsult...@gmail.com
> >> > wrote:
> >>
> >> > I am creating a Menu component (for a ul tag) that needs to
> >> > programmatically generate the child links.
> >> >
> >> > I already have a MenuItem component, but this is parameter bound to a
> >> > template, whereas now I need to programmatically drive the parameters.
> >> >
> >> > I either need to be able to create the existing MenuItem objects
> >> somehow in
> >> > the Menu component and render them, or I simply write the links out in
> >> the
> >> > menu - however since my Menu component isn't extending AbstractLink
> >> (like
> >> > MenuItem) I can't use writeLink().
> >> >
> >> > Any ideas what is the simplest approach to resolve this? Code below.
> >> >
> >> > John
> >> >
> >> >
> >> > public class Menu {
> >> >
> >> >     /** The text. */
> >> >     @Parameter(required = true, allowNull = false, defaultPrefix =
> >> > BindingConstants.LITERAL)
> >> >     private String name;
> >> >
> >> >     /** The resources. */
> >> >     @Inject
> >> >     private ComponentResources resources;
> >> >
> >> >     /** The component source. */
> >> >     @Inject
> >> >     private ComponentSource componentSource;
> >> >
> >> >     @Inject
> >> >     private PageRenderLinkSource linkSource;
> >> >
> >> > /** The messages. */
> >> > @Inject
> >> > private Messages messages;
> >> >
> >> >     @Inject
> >> >     private MenuService menuService;
> >> >
> >> >     /** The state bean. */
> >> >     @SessionState(create = false)
> >> >     private SessionStateBean stateBean;
> >> >
> >> >     /**
> >> >      * If provided, this is the activation context for the target page
> >> (the
> >> >      * information will be encoded into the URL). If not provided,
> then
> >> the
> >> >      * target page will provide its own activation context.
> >> >      */
> >> >     @Parameter
> >> >     private Object[] context;
> >> >
> >> >     /**
> >> >      * Begin render.
> >> >      *
> >> >      * @param writer the writer
> >> >      */
> >> >     void beginRender(MarkupWriter writer) {
> >> >     writer.element("ul");
> >> >     for (String pageName :
> >> > menuService.getPageNames(MenuService.Menu.valueOf(name))) {
> >> >     renderMenuItem(pageName, writer);
> >> >     }
> >> >     }
> >> >
> >> >     private void renderMenuItem(String page, MarkupWriter writer) {
> >> >         Link link = resources.createPageLink(page,
> >> >        resources.isBound("context"), context);
> >> >        writer.element("li");
> >> > NO!!        writeLink(writer, link);
> >> >  writer.writeRaw(messages.get(page.toLowerCase().concat(".link")));
> >> >     writer.end();
> >> >     writer.end();
> >> >     }
> >> >
> >> >     /**
> >> >      * After render.
> >> >      *
> >> >      * @param writer the writer
> >> >      */
> >> >     void afterRender(MarkupWriter writer) {
> >> >    writer.end();
> >> >     }
> >> > }
> >> >
> >> >
> >> > public class MenuItem extends AbstractLink {
> >> >
> >> >     /**
> >> >      * The logical name of the page to link to.
> >> >      */
> >> >     @Parameter(required = true, allowNull = false, defaultPrefix =
> >> > BindingConstants.LITERAL)
> >> >     private String page;
> >> >
> >> >     /** The text. */
> >> >     @Parameter(required = true, allowNull = false, defaultPrefix =
> >> > BindingConstants.LITERAL)
> >> >     private String text;
> >> >
> >> >     /** The resources. */
> >> >     @Inject
> >> >     private ComponentResources resources;
> >> >
> >> >     /** The component source. */
> >> >     @Inject
> >> >     private ComponentSource componentSource;
> >> >
> >> >     /** The state bean. */
> >> >     @SessionState(create = false)
> >> >     private SessionStateBean stateBean;
> >> >
> >> >     /**
> >> >      * If provided, this is the activation context for the target page
> >> (the
> >> >      * information will be encoded into the URL). If not provided,
> then
> >> the
> >> >      * target page will provide its own activation context.
> >> >      */
> >> >     @Parameter
> >> >     private Object[] context;
> >> >
> >> >     /**
> >> >      * Begin render.
> >> >      *
> >> >      * @param writer the writer
> >> >      */
> >> >     void beginRender(MarkupWriter writer) {
> >> > if (isDisabled())
> >> >    return;
> >> >    Link link = resources.createPageLink(page,
> >> >    resources.isBound("context"), context);
> >> >    writer.element("li");
> >> >    writeLink(writer, link);
> >> >    writer.writeRaw(text);
> >> >     }
> >> >
> >> >     /**
> >> >      * After render.
> >> >      *
> >> >      * @param writer the writer
> >> >      */
> >> >     void afterRender(MarkupWriter writer) {
> >> > if (isDisabled())
> >> >    return;
> >> > writer.end();
> >> > writer.end();
> >> >     }
> >> > }
> >> >
> >>
> >
> >
>

Reply via email to