我正在用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将随机数附加到URL。但是用onclick
代替href
感觉不像是正确的做法。如果用户想在新选项卡中打开链接该怎么办?
我认为这将是一个相当普遍的问题。有更好的解决办法吗?
您的浏览器或代理必须缓存该页面。尝试将这些标头添加到缓存页面的响应中,而不应该是:
response.setDateHeader("Expires", 0);
response.setHeader("Cache-control", "no-store, no-cache, must-revalidate");
response.setHeader("Pragma", "no-cache");
关于JSTL的使用,我有两点要说:
- 核心库的前缀通常是
c
,而不是core
。 URL应该使用
<c:url>
标签组成。这个标签负责- 获取绝对url(从
/
开始)并预先挂起应用程序的上下文根(/agency.do
变成/myApp/agency.do
) - 如果需要重写URL,将会话ID添加到URL中
- 正确编码URL参数
- 获取绝对url(从
例如:
<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>