早上好
我正在使用Google Chrome中的Web API Notifications,问题是:我的xhtml页面头部有一个脚本,它通过托管bean从数据库中检索值,此过程必须在计时器上完成(间隔)每隔10秒,它第一次工作正常,但有时不会在数据库中返回以下值,而是继续显示第一次恢复的值。我怎样做才能使间隔越来越大这些值从数据库中的托管bean开始再次恢复我的代码如下所示我希望能提供帮助。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:ice="http://www.icesoft.com/icefaces/component"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ace="http://www.icefaces.org/icefaces/components">
<h:head>
<script>
if (!window.webkitNotifications)
{
alert('Lo sentimos, su navegador no soporta notificación de escritorio. Trabaje con Google Chrome.');
}
function RequestPermission (callback)
{
window.webkitNotifications.requestPermission(callback);
}
function getNroCasosPendientes()
{
var nroCasosPendientes = '#{ControladorBk.getNroCasosPendientes()}';
return nroCasosPendientes;
}
function getNroRecordatoriosPendientes()
{
var nroRecorPendientes = '#{ControladorBk.getNroRecordatoriosPendientes()}';
return nroRecorPendientes;
}
function abrirVentana(url)
{
var height = screen.availHeight-30;
var width = screen.availWidth-10;
var left = 0;
var top = 0;
settings = 'fullscreen=no,resizable=yes,location=no,toolbar=no,menubar=no';
settings = settings + ',status=no,directories=no,scrollbars=yes';
settings = settings + ',width=' + width +',height=' + height;
settings = settings + ',top=' + top +',left=' + left;
settings = settings + ',charset=iso-8859-1';
var win = window.open(url, '', settings);
win.outerHeight = screen.availHeight;
win.outerWidth = screen.availWidth;
win.resizeTo(screen.availWidth, screen.availHeight);
if (!win.focus)
{
win.focus();
}
return win;
}
function notification ()
{
if (window.webkitNotifications.checkPermission() > 0)
{
RequestPermission(notification);
}
var icon = 'http://entidades.com/images/img999.png';
var title = 'AVISO';
var nroCasosPendientes = getNroCasosPendientes();
var nroRecorPendientes = getNroRecordatoriosPendientes();
if(nroCasosPendientes != '0' || nroRecorPendientes != '0')
{
var body = 'Tienes '+nroCasosPendientes+' Casos y '+nroRecorPendientes + ' Recordatorios pendientes.';
var popup = window.webkitNotifications.createNotification(icon, title, body);
popup.show();
setTimeout(function()
{
popup.cancel();
}, '5000');
popup.onclick = function()
{
abrirVentana('http://localhost:8080/Proyect/faces/Page.xhtml');
};
}
}
var timer = setInterval(function()
{
notification();
}, 10000);
</script>
</h:head>
答案 0 :(得分:0)
普通的javascript正在客户端执行。
表达式如
"#{ControladorBk.getNroCasosPendientes()}"
- 在服务器端。
因此,您需要拨打服务器以更新&#34; nroCasosPendientes
&#34;和&#34; nroRecorPendientes
&#34;
您可以通过以下方式实现这一目标:
所以,在html中你需要添加以下代码:
<h:form>
<h:inputHidden id="hiddenCasos"
value="#{ControladorBk.getNroCasosPendientes()}"/>
<h:inputHidden id="hiddenRecordatorios"
value="#{ControladorBk.getNroRecordatoriosPendientes()}"/>
<h:commandLink id="btnUpdate"
style="display: none">
<f:ajax render="hiddenCasos hiddenRecordatorios"
onevent="performNotification"/>
</h:commandLink>
</h:form>
如你所见:
在<script>
中,您需要进行一些更改:
<script>
//your code
//add this...
function updateBean() {
document.getElementById("btnUpdate").click();
}
//...and this
function performNotification(data) {
if(data.status === 'success') {
notification();
}
}
//...change this
function notification() {
//your code
//get values from hidden fields
var nroCasosPendientes = document.getElementById("hiddenCasos").value;
var nroRecorPendientes = document.getElementById("hiddenRecordatorios").value;
}
//...and change this
var timer = setInterval(function{
updateBean();
}, 10000);
</script>
所以,改变是:
notification()
将被称为notification()
和nroCasosPendientes
的{{1}}值
{隐身字段nroRecorPendientes
醇>