jam*_*mes 9 javascript java dojo jsf-2
这是我第一次在论坛上提问,因为我的问题通常已被提问和回答.我还没有找到适合我的这个问题的答案,所以这里有:
我在JSF 2.0中进行Ajax调用,如下所示:
< f :ajax listener="#{myReferenceController.clearRequiredReferenceNumber}"
onevent="resetFocus" execute="@form"
render=":resultsForm:ResultsDisplay" />
Run Code Online (Sandbox Code Playgroud)
侦听器中的所有内容都能正常工作,然后在我的.xhtml页面中的数据表中按预期呈现数据.问题是,我在调用JavaScript onevent似乎得到调用之前渲染完成的,因此焦点重新在我列的过程中datatable不起作用,因为datatable被删除,然后重新添加到Ajax完成重新渲染时的DOM.
我正在查看我的Javascript中的"成功"状态,希望此时渲染已经完成.唉,事实并非如此,而我getElementById(实际上dojo.byId)并没有在数据表中找到元素.我知道我的Javascript函数在正常情况下工作,因为我在没有Ajax调用的情况下调用同一个函数,并且一切都在那里完美运行.
如果我可以避免渲染我正试图设置焦点的表格中的单元格,那将是很好的,但我的听众正在ajax调用中对此单元格进行更改.我在我的智慧结束,所以对此的任何想法都将非常感激.
- 回应Balusc(听到关于你的好消息,顺便说一句)
嗯,我认为我实际上是在正确的轨道上,但似乎仍然有麻烦.我正在检查"成功",甚至还是成功,我无法在这里设定重点.这是我检查"成功"的Javascript函数:此函数在另一种情况下工作,它没有附加到Ajax事件.
function resetFocus(data) {
var theRow = dojo.byId("resultsForm:selectedRow").value;
if (data.status == "success") {
dojo.query('[widgetId]',dojo.byId('theResultsDataTable'))
.forEach(function(node) {
var widget = dijit.byNode(node);
var theId = widget.attr("id")
if (theId.indexOf(':' + theRow + ':') != -1) {
if (theId.indexOf('theOrppoNum') != -1) {
widget.focus();
widget.attr("isFocused",true);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 23
附着在功能onevent属性将被实际调用3次.在发送ajax请求之前,有一次是在ajax响应到达之后,一次是在成功更新HTML DOM之后.您应该检查status给定数据参数的属性.
function onEventFunction(data) {
var status = data.status; // Can be "begin", "complete" or "success".
switch (status) {
case "begin": // Before the ajax request is sent.
// ...
break;
case "complete": // After the ajax response is arrived.
// ...
break;
case "success": // After update of HTML DOM based on ajax response..
// ...
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在您的特定情况下,您只需要添加一个检查状态是否success.
function resetFocus(data) {
if (data.status == "success") {
// Do your job here.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13920 次 |
| 最近记录: |