刷新包含JSP代码片段的DIV元素

时间:2010-11-30 11:26:26

标签: javascript jsp html reload

我有一个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>

也欢迎任何更好的想法。

3 个答案:

答案 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(更难)。