Я использую icefaces и таблицу данных jquery, полученную из JSON на стороне клиента, без данных на стороне сервера.
У меня есть командная кнопка, которая используется для добавления всех сотрудников, выбранных в таблице данных.
<h:commandButton styleClass="xButton" id="xxButton" value="AddSelected action="#{xyzBean.addSelected}" >
<f:ajax execute ="abcForm" event="action" onevent="refreshDt"/>
</h:commandButton>
И у меня есть метод Jquery, связывающий щелчок по этой кнопке, который вычисляет выбранные строки из таблицы и устанавливает для них скрытое значение, которое, в свою очередь, привязано к свойству вспомогательного компонента.
Метод выглядит следующим образом
$(document.body).on('click','#abcForm\\:xxButton',function() {
var selectedRows =[];
selectedRows = table.rows('.selected-row').data();
//for binding to JSF values
//below sets the value a hidden field empList which is bound to backing bean
var input = document.getElementById("abcForm:empList");
input.value = JSON.stringify(selectedRows );
}
});
Скрытое поле
<h:inputHidden id="empList" value="#{xyzBean.empList}" >
<f:converter converterId="employeeConverter" />
</h:inputHidden>
При нажатии кнопки commandButton вызывается метод действия xyzBean.addSelected, который выполняет некоторую бизнес-логику и после этого выполняется. Мой f: ajax должен захватить и вызвать javascript метод refreshDt, который обновляет dataTable.
/*<![CDATA[*/
function refreshDt(data) {
if(data.status=='begin'){
var selectedRows =[];
selectedRows = table.rows('.selected-row').data();
//for binding to JSF values
//below sets the value a hidden field empList which is bound to backing bean
var input =
document.getElementById("abcForm:empList");
input.value = JSON.stringify(selectedRows );
}
if(data.status=='success'){
//business logic to refresh data
}
}
/* ]]>*/
Но странная проблема, с которой я здесь сталкиваюсь, заключается в том, что если я использую тег f: ajax, значение empList свойства управляемого компонента всегда будет пустым.
То, чему я научился до сих пор от отладки,
1. javascript метод refreshDt вызывается перед обработчиком действия базового компонента xyzBean.addSelected, а затем связывается с jquery onclick (который фактически выбирает и присваивает значение empList)
2. Поэтому я явно устанавливаю empList снова в методе refreshDt (в разделе begin)
Даже тогда в компоненте поддержки значение empList пусто
Также, если я удаляю f: ajax, тогда все работает отлично, но тогда я не могу обновить dataTable.
Любая помощь приветствуется. Спасибо