早上好
我正在使用Google中的Web通知--问题是:我的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>发布于 2013-07-26 14:57:12
普通的javascript正在客户端执行。
像"#{ControladorBk.getNroCasosPendientes()}" -在服务器端的表达式。
因此,您需要调用服务器来更新"nroCasosPendientes“和"nroRecorPendientes”
你可以通过以下方式实现这一点:
因此,在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和nroRecorPendientes的值将从隐藏字段中提取https://stackoverflow.com/questions/17882847
复制相似问题