【发布时间】:2014-07-18 14:55:35
【问题描述】:
由于 Tiles,我遇到了重新加载 Javascript 的问题。
Tiles-definition.xml
<tiles-definitions>
<definition name="template-main" template="/WEB-INF/jsp/home.jsp">
<put-attribute name="header-main-content" value="/WEB-INF/jsp/header_main.jsp"/>
<put-attribute name="header-quote-content" value="/WEB-INF/jsp/header_quote.jsp" />
<put-attribute name="menu-content" value="/WEB-INF/jsp/menu.jsp" />
<put-attribute name="body-content" value="/WEB-INF/jsp/slides.jsp" />
<put-attribute name="footer-content" value="/WEB-INF/jsp/footer.jsp" />
</definition>
<definition name="template-main-login" extends="template-main">
<put-attribute name="header-main-content" value="/WEB-INF/jsp/header_main.jsp" />
</definition>
</tiles-definitions>
home.jsp
<body style="background-color: #5F9EA0">
<head>
<script src="<c:url value="/resources/js/jquery-1.11.1.js" />"></script>
<script src="<c:url value="/resources/js/example.js" />"></script>
bla bla ..
example.js
$(document).ready(function() {
setTimeout(function () {
popUp('show');
}, 1000);
});
我正在使用 Spring-MVC:
加载应用程序时,我将视图返回为 template-main。所以第一个模板定义被调用,应用程序打开时会弹出一个登录弹出窗口,因为我在文档加载时调用弹出窗口。
问题:
现在,当我提供登录凭据并提交时,我正在调用 template-main-login,这反过来又扩展了 template-main。现在的问题是,我包含在 home.jsp 中的 Javascript 正在再次加载(可能是因为我正在扩展模板主布局),这样我第二次打开了我想要停止的弹出窗口。
所以请告诉我如何停止弹出窗口再次打开。
【问题讨论】:
-
你在 JS 文件的缓存头中指定了什么?它现在在浏览器工具中显示什么?
-
如果使用 varnish/nginx 甚至 tomcat,您可以为这些静态文件指定标头,以便它们在浏览器中缓存(在持续时间内或通过 ETags - etags 将查询服务器以查看是否文件哈希是否仍然有效)。
-
@alihaider 我没有使用任何缓存头......它只是一个普通的 js 文件。是的,我正在使用 Tomcat。
标签: javascript jquery spring jsp tiles