2010-05-07 3 views
2

Mon site dispose d'un menu de nav construit dynamiquement en tant que JSP distincte et inclus dans la plupart des pages via <jsp:include />. Le contenu et le style du menu sont déterminés par les pages auxquelles l'utilisateur accède et n'a pas accès.Est-il possible d'évaluer une JSP une seule fois par session et de la mettre en cache après cela?

L'ensemble de pages accessibles est extrait de la base de données lorsqu'un utilisateur se connecte et non au cours d'une session. Il n'est donc pas nécessaire de réévaluer le code du menu de navigation chaque fois que l'utilisateur demande une page. Existe-t-il un moyen simple de générer le balisage à partir du JSP une seule fois par session et de le mettre en cache/de le réutiliser pendant la session?

+0

qui serveur d'applications utilisez-vous? – echox

+0

JBoss 5. Plus de caractères –

Répondre

3

Une approche similaire, mais en utilisant JSTL plutôt que le code scriptlet:

<c:if test="${empty menuContents}"> 
    <c:set var="menuContents" scope="session"> 
    Render the menu here... 
    </c:set> 
</c:if> 
<c:out value="${menuContents}" escapeXml="false"/> 
+2

+1: Tout est meilleur que les scriptlets. – BalusC

1

Voici un fichier de tags JSP qui devrait faire ce que vous voulez, non testé.

<%@tag description="Caches the named content once per session" pageEncoding="UTF-8"%> 

<%@attribute name="name"%> 

<% 
String value = (String)request.getSession().getAttribute(name); 

if (value == null) { 
%> 
<jsp:doBody var="jspBody"/> 
<% 
    value = jspContext.getAttribute("jspBody", PageContext.PAGE_SCOPE); 
    request.getSession().setAttribute(name, value); 
} 
jspContext.setAttribute("value", value); 
%> 
${value} 

Pour l'utiliser, vous feriez quelque chose comme:

<t:doonce name="navigation"> 
    <jsp:include page="nav.jsp"/> 
</t:doonce> 
+0

Awesome! Je vais essayer ce lundi. –

Questions connexes