вызов 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 статус «успех» в надежде, что на этом этапе рендеринг будет завершен. Увы, это не так, и мойgetElementById(на самом делеdojo.byId)не находит элемент в datatable. Я знаю, что моя функция 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);
                    }
                }
            });
    }
}
9
задан Michael Gaskill 20 May 2016 в 01:39
поделиться