浏览器显示过时的JSP页面,用户必须手动刷新

时间:2011-10-11 12:03:46

标签: java javascript jsp jstl

我正在使用JSP的网站。有一个名为Agency的页面是公开可见的,并显示了代理商的详细信息。但是,当“代理商管理员”登录时,将使用“添加/编辑”链接呈现相同的代理商页面,以修改页面上的数据。

问题在于:

  • 用户访问代理商页面(此时未登录)

  • 此用户以代理商管理员身份登录并再次导航至代理商页面

  • 在用户手动刷新浏览器之前,代理商页面不会显示添加/修改链接

这是代理商页面的链接:

<a href="agency.do?agencyId=<core:out value="${agency.agencyId}" />">
    <core:out value="${agency.name}" />
</a>

我一直在使用它作为解决方法:

<a href="javascript:void(0)" onclick="javascript:window.location = 'home.do?agencyId=<core:out value="${agency.agencyId}" />&rnd=' + Math.random()">
    <core:out value="${agency.name}" />
</a>

我正在使用javascript将随机数附加到网址。但是使用onclick代替href并不是正确的做法。如果用户想要在新标签中打开链接怎么办?

我认为这是一个相当普遍的问题。有没有更好的解决方案?

1 个答案:

答案 0 :(得分:3)

您的浏览器或代理必须缓存该页面。尝试将这些标题添加到缓存的页面响应中,不应该是:

response.setDateHeader("Expires", 0);
response.setHeader("Cache-control", "no-store, no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");

关于JSTL的使用,我会有两个评论:

  1. 核心库的通常前缀是c,而不是core
  2. 应该使用<c:url>标记来组合URL。这个标签负责

    • 获取绝对网址(以/开头)并预先挂起应用的上下文根(/agency.do成为/myApp/agency.do
    • 如果需要重写URL,则将会话ID添加到URL
    • 正确编码网址参数
  3. 例如:

    <c:url var="agencyUrl" value="agency.do">
        <c:param name="agencyId" value="${agency.agencyId}" />
    </c:url>
    <a href="${fn:escapeXml(agencyUrl)}"><c:out value="${agency.name}" /></a>