2013-09-10 3 views
1

Я хочу создать портлет для мониторинга Что-то, поэтому ему нужно как автоматически обновлять страницу портлета каждый промежуток времени, как я могу это достичь? Я пытался с помощью обычного метода использовать Javascript, но его не сработало ... Спасибо, пожалуйста, дайте мне пример :(Auto Refresh Portlet Liferay 6.0 (Периодически обновляется)

любая помощь была бы действительно оценена Я пытаюсь использовать обычный код для 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> 

с уважением

Даниал

ответ

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, которые дают мне основную идею, как решить эту проблему :)

с уважением

Даниал

0

Если вы хотите обновить портлет на регулярные промежутки времени, вы можете использовать метод serveResource.

Сделайте вызов ajax для метода serveResource, и вы можете установить setTimeout для этого вызова ajax. Ниже приведен пример фрагмента кода -

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); 
    }); 

}

+0

, как я могу запустить этот JavaScript для запуска? или этот скрипт будет работать, когда onLoad или что? – dmh

0

Установка заголовка Refresh будет в - лучшем случае - обновить всю страницу (это то, что он имел в виду, чтобы сделать), а не только портлет.

Как настроить это обновление зависит от вашей базовой технологии для написания портлета. В основном вы хотите сделать запрос AJAX на свою страницу, чтобы получить новые данные и повторно отобразить их, как предположил @harishkrsingla.

Если ваш код чистый JSP, вы создали две страницы: - один для отображения портлета - другой, который делает содержание

Ваша страница портлета будет выглядеть примерно так (на самом деле Writting это с верхней части моей головы, проверить документацию на сайте):

<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/

конечно, это только й основная идея. Вы действительно должны включать некоторую обработку ошибок и т.д.

+0

привет там boky ... спасибо за ваш ответ, я пробовал ваш ответ, но все равно не повезло, его не работает, в data.jsp, я показал текущее время, но он не обновляется каждую секунду, и если я пробовал @harishkrsingla ответить, как я могу запускать javascript для запуска нагрузки на каждый раз? – dmh

+0

И я использую портлет MVC :) – dmh

+0

Сначала убедитесь, что ваш URL-адрес в load() верен. Затем убедитесь, что ваш груз стреляет (обратитесь к инспектору Chrome). Также убедитесь, что у вас нет синтаксических ошибок в вашем Javascript (опять же, проверьте с помощью Inspector). – boky