这是我第一次在论坛上提问,因为我的问题通常已被提问和回答.我还没有找到适合我的这个问题的答案,所以这里有:
我在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)