You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Struts Newsgroup (@Basebeans.com)" <st...@basebeans.com> on 2002/07/02 19:55:02 UTC

Re: [Off Topic] Iterating through Parents/children help [SOLVED]

Subject: Re: [Off Topic] Iterating through Parents/children help [SOLVED]
From: "Matt Raible" <ma...@raibledesigns.com>
 ===
First page:
-------------------

<c:forEach var="catalog" items="${libraryCatalog}">
    <c:out value="${catalog.name}"/><br/>
    <%-- Show all the items in this catalog --%>
    <c:forEach var="link" items="${catalog.items}" varStatus="status">
        <c:out value="${link.name}"/><br/>
    </c:forEach>

    <c:set var="catalogs" value="${catalog.catalogs}" scope="request"/>
    <c:set var="indentLevel" scope="request">40</c:set>
    <c:import url="/items.jsp"/>

</c:forEach>

Second Page (items.jsp):
-------------------

<c:forEach var="catalog" items="${requestScope.catalogs}">
    <c:out value="${catalog.name}"/>
    <%-- Show all the items in this catalog --%>
    <c:forEach var="link" items="${catalog.items}" varStatus="status">
        <%-- determine if we're on an odd row --%>
        <c:out value="${link.name}"/></a>
    </c:forEach>

    <%-- include this same page again, with new values --%>
    <c:set var="catalogs" value="${catalog.catalogs}" scope="request"/>
    <c:set var="indentLevel" value="${requestScope.indentLevel + 20}"
scope="request"/>
    <c:import url="/items.jsp"/>

</c:forEach>


"Matt Raible" <ma...@raibledesigns.com> wrote in message
news:afsg27$oee$1@basebeans.com...
> Here's what I came up with using JSTL, but there's GOT to be a better
> (recursive) way of doing this:
>
> <c:forEach var="catalog" items="${myCatalog}">
>     <c:out value="${catalog.name}"/><br/>
>     <%-- Show all the items in this catalog --%>
>     <c:forEach var="link" items="${catalog.items}">
>         <c:out value="${link.name}"/>
>     </c:forEach>
>
>     <%-- show all the child catalogs for this catalog --%>
>         <c:forEach var="child1" items="${catalog.catalogs}">
>             <c:out value="${child1.name}"/>
>
>             <%-- Show all the items in this catalog --%>
>             <c:forEach var="link" items="${child1.items}">
>                 <c:out value="${link.name}"/></a>
>             </c:forEach>
>
>             <%-- show all the child catalogs for this catalog --%>
>             <c:forEach var="child2" items="${child1.catalogs}">
>                 <c:out value="${child2.name}"/>
>
>                 <%-- Show all the library items in this catalog --%>
>                 <c:forEach var="link" items="${child2.items}"
> varStatus="status">
>                     <c:out value="${link.name}"/>
>                 </c:forEach>
>
>                 <%-- show all the child catalogs for this catalog --%>
>                     <c:forEach var="child3" items="${child2.catalogs}">
>                         <c:out value="${child3.name}"/>
>
>                         <%-- Show all the items in this catalog --%>
>                         <c:forEach var="link" items="${child3.items}"
> varStatus="status">
>                             <c:out value="${link.name}"/>
>                         </c:forEach>
>                     </c:forEach>
>                 </c:forEach>
>         </c:forEach>
> </c:forEach>
>
> "Matt Raible" <ma...@raibledesigns.com> wrote in message
> news:afquue$811$1@basebeans.com...
> > I have an difficult architecture problem.  Please help if you can.
Below
> > are two tables that are linked by catalog_id.
> >
> > catalog
> > --------------
> > catalog_id
> > catalog_name
> > parent_id
> >
> > catalog_detail
> > ---------------
> > detail_id
> > catalog_id
> > detail_name
> > detail_description
> > detail_url
> >
> >
> > So basically, these two tables are used to render the following in the
> > "view"
> >
> > My First Catalog Entry
> >   -- URL to detail Entry
> >   -- URL to detail Entry
> >
> > My Second Catalog Entry
> >   -- URL to detail Entry
> >
> > ... you get the picture.
> >
> > My problem comes in in that a catalog entry can be a child of another
> > catalog entry (not a detail entry).  So you'd end up with something like
> > this:
> >
> > My First Catalog Entry
> >   -- 1
> >   -- 2
> >   My Second Catalog Entry
> >     -- 3
> >     --
> >     My Third Catalog Entry....
> >
> > I need help with (1) How do I prepare this data for display on a page,
and
> > (2) How do I design my page without knowing how many levels deep to go?
> >
> > Here are my solutions to date:
> >
> > 1.  I query the catalog table, and create an ArrayList of CatalogForm's
> > (JavaBeans).  As I'm adding a CatalogForm to the arraylist, I use the
> > catalog_id to get the children of that catalog entry and set them as a
> > Vector of DetailForm's on the CatalogForm.  This works great without the
> > parent concept.  With the parent concept, maybe I should keep what I'm
> > doing, but then lookup through the ArrayList and see if any
CatalogForm's
> > have parents.  If so, set the CatalogForm as a ChildForm on it's parent.
> >
> > 2.  Use JSTL and <c:forEach> to iterate through the catalogForm's and
> > display the name and the detail's information.  I can add a few more
> > <c:forEach> tags, but this will only allow the architecture to traverse
> the
> > number of levels that I've defined in my JSP.  Is there anyway to allow
> for
> > infinite levels?  Maybe some sort of reflection - or even using XML and
> XSL?
> > Any and all ideas are welcome.
> >
> > Finally, I am only responsible for displaying this data, nothing has to
be
> > updated - that's up to another application that's already been written.
> >
> > Thanks,
> >
> > Matt
> >
> >
>
>



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>