вызов ajax в jsf 2.0 (myfaces), функция onevent Javascript в теге ajax вызывается до завершения рендеринга

Я впервые задаю вопрос на форуме, так как обычно мои вопросы уже были заданы и даны ответы. Я не нашел ответ на эту проблему, который работает для меня, так что здесь идет:

Я делаю Ajax-вызов в JSF 2.0 следующим образом:

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

Все в слушателе работает отлично, и затем данные отображаются так, как и ожидалось, в таблице данных, которая находится на моей странице .xhtml. Проблема в том, что Javascript, который я вызываю вonevent кажется, вызывается до завершения рендеринга, и поэтому процесс сброса фокуса на столбец в моемdatatable не работает, так какdatatable удаляется, а затем снова добавляется в DOM, когда Ajax завершает повторный рендеринг.

Я ищу в своем Javascript статус «success» в надежде, что на этом этапе рендеринг будет завершен. Увы, это не тот случай, и мойgetElementById (на самом делеdojo.byId) не находит элемент в datatable. Я знаю, что моя функция Javascript работает в нормальных условиях, поскольку я вызываю эту же функцию в ситуации, когда нет вызова Ajax, и там все прекрасно работает.

Если бы я мог просто избежать рендеринга ячейки в таблице, на которую я пытаюсь установить фокус, это было бы замечательно, но мой слушатель вносит изменения в эту ячейку в вызове ajax. Я в своем уме, поэтому любые идеи по этому поводу были бы очень признательны.

- в ответ на Балуск (слышал о вас хорошие вещи, кстати)

Хм, я на самом деле был на правильном пути, я думаю, но все еще, кажется, возникают проблемы. Я проверяю на "успех" и все же даже в успехе, я не могу установить фокус здесь. Вот моя функция 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);
                    }
                }
            });
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос