Wywołanie ajax w jsf 2.0 (myfaces), wywoływana jest funkcja onevent Javascript w znaczniku ajax przed zakończeniem renderowania

Po raz pierwszy zadaję pytanie na forum, ponieważ zazwyczaj moje pytania zostały już zadane i udzielone. Nie znalazłem odpowiedzi na ten problem, który dla mnie działa, więc tutaj:

Wykonuję wywołanie Ajax w JSF 2.0 w następujący sposób:

< f :ajax listener="#{myReferenceController.clearRequiredReferenceNumber}"
    onevent="resetFocus" execute="@form"
    render=":resultsForm:ResultsDisplay" />

Wszystko w słuchaczu działa doskonale, a dane są następnie renderowane zgodnie z oczekiwaniami w tabeli danych, którą mam na mojej stronie .xhtml. Problem polega na tym, że JavaScript, który wywołuję wonevent wydaje się być wywoływane przed zakończeniem renderowania, a zatem proces resetowania fokusa do kolumny w moimdatatable nie działa, ponieważdatatable jest usuwany, a następnie ponownie dodawany do DOM, gdy Ajax kończy renderowanie.

W moim Javascript szukam statusu „sukcesu”, w nadziei, że w tym momencie renderowanie zakończy się. Niestety, tak nie jest i mojegetElementById (tak właściwiedojo.byId) nie znajduje elementu w datatable. Wiem, że moja funkcja JavaScript działa w normalnych okolicznościach, ponieważ wywoływam tę samą funkcję w sytuacji, gdy nie ma wywołania Ajax i wszystko działa tam doskonale.

Gdybym mógł po prostu uniknąć renderowania komórki w tabeli, do której próbuję ustawić fokus, byłoby świetnie, ale mój detektor dokonuje zmian w tej komórce w wywołaniu ajax. Jestem na wyczerpaniu, więc wszelkie pomysły na ten temat byłyby bardzo mile widziane.

- w odpowiedzi na Balusc (słyszałem o tobie dobre rzeczy, btw)

Hmm, właściwie byłem na dobrej drodze, myślę, ale wciąż wydaje mi się, że mam kłopoty. Sprawdzam „sukces” i nadal nawet w sukcesie, nie jestem w stanie skupić się tutaj. Oto moja funkcja Javascript, która sprawdza „sukces”: ta funkcja działa w innej sytuacji, w której nie jest dołączona do zdarzenia 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);
                    }
                }
            });
    }
}

questionAnswers(1)

yourAnswerToTheQuestion