You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Elie Ciment <ec...@gmail.com> on 2006/11/09 20:35:20 UTC
Tiles Menu Items
Hi,
I have an issue with Struts Tiles putList items. I can get all the items in
my jsp page fine, with the links and values for each menu item.
The problem is, when I try to nest a putList tag within another one, to
attempt to create subMenu functionality. I have no way of retrieving the
submenu items on my jsp page.
For example, I have a tile definition called ".mainMenu", which defines a
putList tag with 3 items. The first two are plain <item link="
http://www.google.com" value="Google Home Page"/> type of items - the third
is not an item, but rather another putList:
<definition name=".mainMenu" path="/WEB-INF/template/header.jsp">
<putList name="menuItems">
<item link="http://www.google.com" value="Google Home Page"/>
<item link="http://www.gmail.com" value="Google Email Page"/>
<putList name="subMenu">
<item link="http://somesublink.menu/"
value="SubLinkTest"/>
<item link="http://somesublink2.menu/"
value="SubLinkTest2"/>
</putList>
</definition>
The point of doing this is obvious - I want to get the subMenu functionality
from the tiles menu items putList tag. However, when displaying it on the
jsp page, I don't know how to iterate over the submenu:
For the main menu:
<tiles:importAttribute name="menuItems" ignore="true"/>
<!-- Menu begin -->
<ul >
<c:forEach var="item" items="${menuItems}">
<li><a href="<c:out value="${item.link}"/>"><c:out
value="${item.value}"/></a></li>
</c:forEach>
</ul>
That works fine for those menuitems in the "top-level" menuItems putList.
When it comes to the other subMenu, I will get errors. Obviously so. The
problem is that when I try to iterate over them with either c:forEach or
using Struts logic:iterate tags I can't do it and get errors as well. What
is interesting is that when I just output the "item" itself, I can see the
entire collection of submenu items -
for example:
<c:out value="${item}"/>
(without any ".value" or ".link") - so I know it is there and is accesible.
The question is, how do I access this putList in the jsp page?
Thanks for your help!!!
-EC
Re: Tiles Menu Items
Posted by Elie Ciment <ec...@gmail.com>.
Here's a solution I thought of for the time being; if anyone else has any
better way of accomplishing this, or comments, please share them with me.
The following takes a putList containing items, as well as nested putLists
(maximum one level of nesting for this example, but it can be extended to
handle more):
[The first item in the nested putList will be displayed in the top level
menu, all subsequent items will be in the submenu]
<ul>
<c:catch>
<c:forEach var="item" items="${menuItems}">
<!-- Top level menu item -->
<c:catch var="e1">
<c:if test=" ${empty item.value}">
<!-- DUMMY TEST TO BREAK TO SUBMENU -->
</c:if>
<li>
<a href="<c:out value="${item.link}"/>">
<c:out value="${item.value}"/>
</a>
</li>
</c:catch>
<c:if test="${not empty e1}">
<%
//Get the subMenu to populate the menu with
ArrayList<SimpleMenuItem> subMenu =
(ArrayList<SimpleMenuItem>) pageContext.getAttribute("item");
pageContext.setAttribute("subMenu", subMenu);
//Set an initial variable which will be a
//placeholder telling us if the first item
//hsa been added to the submenu - this item
//will appear on the main menu
pageContext.setAttribute("initial", true);
%>
<c:forEach var="subItem" items="${subMenu}">
<c:if test="${not initial}">
<c:if test=" ${empty subItem.value}"/>
<!-- Submenu item -->
<li>
<a href="<c:out value="${subItem.link}"/>">
<c:out value="${subItem.value}"/>
</a>
</li>
</c:if>
<c:if test="${initial}">
<li>
<a href="<c:out value="${subItem.link}"/>">
<c:out value="${subItem.value}"/>
</a>
<ul>
<%
//Reset initial to false
pageContext.setAttribute("initial", false);
%>
</c:if>
</c:forEach>
</li>
</ul>
</c:if>
</c:forEach>
</c:catch>
</ul>
And, the tiles definition is as it was previously, except "somesublink" ends
up being the main menu (top level) link, not a sub-menu link.
Again, if anybody wishes to share their thoughts, please do... I am sure
there is a better solution to this nested menu tiles issue.
Thanks
On 11/9/06, Elie Ciment <ec...@gmail.com> wrote:
>
> Hi,
>
> I have an issue with Struts Tiles putList items. I can get all the items
> in my jsp page fine, with the links and values for each menu item.
>
> The problem is, when I try to nest a putList tag within another one, to
> attempt to create subMenu functionality. I have no way of retrieving the
> submenu items on my jsp page.
>
> For example, I have a tile definition called ".mainMenu", which defines a
> putList tag with 3 items. The first two are plain <item link="
> http://www.google.com" value="Google Home Page"/> type of items - the
> third is not an item, but rather another putList:
>
> <definition name=".mainMenu" path="/WEB-INF/template/header.jsp">
> <putList name="menuItems">
> <item link=" http://www.google.com" value="Google Home Page"/>
> <item link="http://www.gmail.com" value="Google Email Page"/>
> <putList name="subMenu">
> <item link="http://somesublink.menu/"
> value="SubLinkTest"/>
> <item link="http://somesublink2.menu/"
> value="SubLinkTest2"/>
> </putList>
> </definition>
>
>
> The point of doing this is obvious - I want to get the subMenu
> functionality from the tiles menu items putList tag. However, when
> displaying it on the jsp page, I don't know how to iterate over the submenu:
>
>
> For the main menu:
>
> <tiles:importAttribute name="menuItems" ignore="true"/>
>
> <!-- Menu begin -->
> <ul >
> <c:forEach var="item" items="${menuItems}">
> <li><a href="<c:out value="${item.link}"/>"><c:out
> value="${item.value}"/></a></li>
> </c:forEach>
> </ul>
>
> That works fine for those menuitems in the "top-level" menuItems putList.
> When it comes to the other subMenu, I will get errors. Obviously so. The
> problem is that when I try to iterate over them with either c:forEach or
> using Struts logic:iterate tags I can't do it and get errors as well. What
> is interesting is that when I just output the "item" itself, I can see the
> entire collection of submenu items -
> for example:
>
> <c:out value="${item}"/>
>
> (without any ".value" or ".link") - so I know it is there and is
> accesible. The question is, how do I access this putList in the jsp page?
>
> Thanks for your help!!!
>
> -EC
>