我的站点有一个导航菜单,它是作为单独的JSP动态构建的,并通过<jsp:include />包含在大多数页面中。菜单的内容和样式由用户可以访问和不能访问的页面决定。
这组可访问页面是在用户登录时从数据库中检索的,而不是在会话过程中检索的。因此,真的没有必要在用户每次请求页面时重新评估导航菜单代码。有没有一种简单的方法可以在每个会话中只从JSP生成一次标记,并在会话期间缓存/重用它?
发布于 2010-05-10 09:27:45
一种类似的方法,但使用JSTL而不是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"/>发布于 2010-05-08 05:57:25
这里有一个JSP标记文件,它可以做你想要的,未经测试。
<%@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}要使用它,您需要执行以下操作:
<t:doonce name="navigation">
<jsp:include page="nav.jsp"/>
</t:doonce>https://stackoverflow.com/questions/2791830
复制相似问题