【问题标题】:Auto Refresh Portlet Liferay 6.0(Periodically refresh)自动刷新 Portlet Liferay 6.0(定期刷新)
【发布时间】:2013-09-13 21:41:41
【问题描述】:

我想创建 Portlet 用于监控某事,所以它需要每隔一段时间自动刷新 Portlet 页面,我该如何实现呢?我一直在尝试使用普通方法,例如使用 Javascript,但它没有用...谢谢,请给我一个例子:(

任何帮助将不胜感激 我正在尝试为 jsp 使用普通代码,但它无法运行

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Auto Refresh Header Example</title>
</head>
<body>
<center>
<h2>Auto Refresh Header Example</h2>
<%
   // Set refresh, autoload time as 5 seconds
   response.setIntHeader("Refresh", 5);
   // Get current time
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("Crrent Time: " + CT + "\n");
%>
</center>
</body>
</html>

问候

丹尼尔

【问题讨论】:

    标签: java javascript liferay portlet liferay-6


    【解决方案1】:

    我可以使用此代码解决此问题

    <%@page import="com.liferay.portal.kernel.portlet.LiferayWindowState"%>
    <%@page import="java.util.Date"%>
    <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    
     <script type="text/JavaScript">
     <!--
     function timedRefresh(timeoutPeriod) {
    
     $.post('<portlet:renderURL windowState="<%= LiferayWindowState.EXCLUSIVE.toString() %>"></portlet:renderURL>', function(data){
         $("#myportlet").html(data);
     })
    }
    timedRefresh(5000);
    //   -->
    
    </script>
    <div id="myportlet"><%= new Date() %></div>
    

    感谢@boky,他给了我解决这个问题的主要思路:)

    问候

    丹尼尔

    【讨论】:

      【解决方案2】:

      如果你想定期更新你的portlet,你可以使用serveResource方法。

      对 serveResource 方法进行 ajax 调用,您可以在此 ajax 调用上设置 setTimeout。以下是示例代码 sn -p -

      function <portlet:namespace />get_updated_data() {
              var f = jQuery.ajax({
              type: "POST",
              url: '<<resourceUrl>>',
              data:  {"name" : "val"},
              dataType: 'json',
              async: false,
           }).success(function(data){
              // success code here             
          }).complete(function(){
              setTimeout(function(){<portlet:namespace />get_updated_data();}, 5000);
          });
      

      }

      【讨论】:

      • 如何触发这个 javascript 运行?或者这个脚本会在 onLoad 时运行还是什么??
      【解决方案3】:

      设置 Refresh 标头将在 -- 最佳情况下 -- 刷新整个页面(这就是它的目的),而不仅仅是您的 portlet。

      如何设置此刷新取决于您编写 portlet 的底层技术。正如@harishkrsingla 建议的那样,基本上您想对您的页面执行 AJAX 请求以获取新数据并重新显示它。

      如果您的代码是纯 JSP,您将设置两个页面: - 一个用于显示 portlet - 渲染内容的另一个

      然后您的 portlet 页面将看起来像这样(真的把它写在我的脑海中,请查看在线文档):

        <div id="portlet">
           <jsp:include file="data.jsp" />
        </div>
        <script type="text/javascript">
           // assuming jquery
           var load;
           load = function() {
               $('#portlet').load('<portlet:namespace />/data.jsp', function() {
                  window.setTimeout(load, 1000);
               });
           }
           load();
        </script>
      

      还可以查看 JSFiddle 上的工作演示:http://jsfiddle.net/z9az9/1/

      当然,这只是基本概念。你真的应该包括一些错误处理等。

      【讨论】:

      • 您好,博基...谢谢您的回答,我已经尝试过您的回答,但仍然没有运气,它不起作用,在 data.jsp 中,我显示了当前日期时间,但它不会每秒更新一次,如果我尝试过@harishkrsingla 回答我如何触发 javascript 在每次页面加载时运行?
      • 我正在使用 MVC portlet :)
      • 首先确保你在 load() 中的 URL 是正确的。然后确保您的负载正在触发(与 Chrome 的 Inspector 核对)。还要确保您的 Javascript 中没有任何语法错误(再次检查 Inspector)。
      • 您好,谢谢您的回答,我让它运行并且只使用一个 JSP
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多