Nu fandt jeg en lidt bedre løsning baseret på Tiles (som jeg allerde anvender sammen med Struts):
http://www.lifl.fr/~dumoulin/tiles/doc/tutorial.html - tilhørende kode og live-eksempler findes her:
http://www.assortedinternet.com/tiles-documentation/tutorial/index.jspLøsningen er baseret på, at menuen er beskrevet som to lister i tiles-defs.xml, én til links og én til navne. Hvilket punkt der er valgt valideres mod title-attributten, menu-logikken er nødt til at blive placeret i template.jsp og ikke i en seperat menu.jsp, som beskrevet i eksemplet. Fordelen ved at dette er, at det netop er muligt at validere mod title-attributten. Placeres menu-logikken i en anden fil end templaten, er man nødt til at introducere en ny tiles-attribut, f.eks. "selected", som skal sættes i hver enkelt side-fil. Jeg kan bedre lide min egen løsning, hvor al hele menuen alt inkls. kan opbygges i tiles-def.xml og ikke er spredt ud over en masse filer. Følgende er definitionerne fra min egen tiles-def.xml:
<tiles-definitions>
<definition name="index" path="/WEB-INF/template/template.jsp">
<put name="title" type="string" value="Forside"/>
<put name="header" value="/WEB-INF/web/header.jsp"/>
<put name="body" value="/WEB-INF/web/introduction.jsp"/>
<put name="right" value="/WEB-INF/web/sidebar.jsp"/>
<putList name="items">
<add value="Forside"/>
<add value="Nyheder"/>
<add value="Butik"/>
</putList>
<putList name="links">
<add value="index.do"/>
<add value="news.do"/>
<add value="shop.do"/>
</putList>
</definition>
</tiles-definitions>
Da de to lister, items og links, skal itereres igennem på samme tid, er man nødt til at bruge lidt scriptlet, følgende er menu-logikken:
<%-- Push component attributes in page context --%>
<tiles:importAttribute />
<table>
<%-- Prepare the links list to be iterated --%>
<bean:define id="links" name="links" type="java.util.List" scope="page" />
<% Iterator i = links.iterator(); %>
<logic:iterate id="iterateItem" name="items" >
<bean:define id="item" name="iterateItem" type="java.lang.String" scope="page" />
<tr>
<td width="10" valign="top" ></td>
<td valign="top" >
<%-- check if selected --%>
<% String link = (String)i.next(); %>
<logic:notEqual name="selected" value="<%=item%>">
<% // Compute link value
if(link.startsWith("/") )
link = request.getContextPath() + link;
%>
<font size="-1"><a href="<%=link%>"><%=item%></a></font>
</logic:notEqual>
<logic:equal name="selected" value="<%=item%>">
<%=item%>
</logic:equal>
</td>
</tr>
</logic:iterate>
</table>
I forhold til eksemplet er String link = (String)i.next(); flyttet ud af logic:notEquals, da i.next() ellers ikke bliver kaldt for det ene punkt der er valgt (med forkerte links til følge).
Håber nogen kan få glæde af denne løsning :-)