我有一个JSP页面,我正在阅读我在Session中设置的会话属性。
我想定期阅读Session属性。我不想重新加载整个页面,而只是在我的DIV中保留我的JSP Session读取属性并尝试重新加载DIV。但它没有重新加载DIV。
这是我的代码库:
<html>
<head>
// Loading CSS and Script files
</head>
<body>
<div id="loadData" style='display:none;'>
<%
String strStatus = String.valueOf(session.getAttribute("Status")) ;
%>
</div>
</body>
<script type="text/javascript">
var reqStatus = '<%= strStatus %>';
$(this).load(function(){
setInterval(function() {
$("#loadData").load();
} ,1000);
});
$("#loadData").load(function(){
if(reqStatus == 'Done') {
// My Code goes here..
}
});
</html>
也欢迎任何更好的想法。
答案 0 :(得分:2)
您的JSP代码仅评估一次 - 首次加载页面时。运行JSP代码时,会生成HTML并将其发送到浏览器。你不能“重新加载”这样的div; JSP代码将无法运行。
您可以做的是将JSP代码放入单独的文件中,然后使用jQuery.load
将该页面加载到div中:
jQuery(document).ready(function() {
setInterval(function() {
jQuery('#loadData').load('/status.jsp');
}, 1000);
}
status.jsp
将只包含一行:
<%= String.valueOf(session.getAttribute("Status")) ; %>
答案 1 :(得分:2)
JSP在服务器上呈现一次,然后发送到客户端,之后Java代码什么都不做。如果您希望在不同的时间/频率加载HTML / javascript代码和Java代码,则不能将它们放在同一个文件中。
将其放入单独的.jsp文件中:
<%= String.valueOf(session.getAttribute("Status")) ; %>
假设它已映射到某个网址/checkStatus.jsp
删除loadData div,因为您不再需要它了。用以下内容替换您的javascript:
var reloadStatus = function () {
$.ajax("/checkStatus.jsp", function (data) {
if (data == "Done") {
// Your code here
}
});
};
setInterval(reloadStatus, 1000);
答案 2 :(得分:1)
在将结果HTML发送到浏览器之前,编译/执行JSP中的代码。您不能重新加载部分页面作为渲染并期望它更改。您可能需要创建一个隐藏的iframe并完全重新加载(简单),或者创建一个Web服务来查询params(更难)。