我遇到了Icefaces的问题,它是javascript bridge。在我对服务器端进行更改后,我不知道这个桥接器做了什么更改。
例如:我的页面中有一个ice:panelPopup组件,其可见属性 =“ #{bean.customPopUp} ”。如果我将“ bean.customPopUp ”更改为“ true ”,弹出窗口会正确显示,但我需要知道:客户端发生了什么,换句话说,我需要知道弹出窗口是否显示我需要做一些使用 javascript 的客户端处理
我遇到了Icefaces的问题,它是javascript bridge。在我对服务器端进行更改后,我不知道这个桥接器做了什么更改。
例如:我的页面中有一个ice:panelPopup组件,其可见属性 =“ #{bean.customPopUp} ”。如果我将“ bean.customPopUp ”更改为“ true ”,弹出窗口会正确显示,但我需要知道:客户端发生了什么,换句话说,我需要知道弹出窗口是否显示我需要做一些使用 javascript 的客户端处理
我也一直在尝试寻找组件级回调的解决方案。这个问题似乎没有很好的解决方案。我求助于在 Javascript 中启动递归轮询函数,该函数在检测到我的组件更新后处理我的任务。我的支持 bean 启动 poller() 并每 500 毫秒运行一次,直到组件更新发生。
var pollingCount = 0;
var previousValue;
function poller() {
// Kill poller after 30 seconds
if (pollingCount >= 60) {
pollingCount = 0;
return;
}
var currentValue = document.getElementById('myInputElement').value;
if (previousValue != currentValue) {
previousValue = currentValue;
pollingCount = 0;
myFunction();
}
else {
pollingCount++;
setTimeout('poller()', 500);
}
}
我的支持豆:
updateDataModel(); // Causes 'myInputElement' component to update
FacesContext fc = FacesContext.getCurrentInstance();
JavascriptContext.addJavascriptCall(fc, "poller();");
我不太喜欢这个解决方案,但目前似乎没有任何好的答案。