Я впервые задаю вопрос на форуме, так как обычно мои вопросы уже были заданы и на них были даны ответы. Я не нашел ответа на эту проблему, который работает для меня,вот так:
Я делаю вызов 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);
}
}
});
}
}