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 :-)