小编jam*_*mes的帖子

在jsf 2.0(myfaces)中调用ajax,在渲染完成之前调用ajax标记中的一个Javascript函数

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

我在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)

javascript java dojo jsf-2

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

dojo ×1

java ×1

javascript ×1

jsf-2 ×1