<h:commandButton value="View Details">
<f:ajax execute="#{setCurrentEmployeeId(emp.id)}" render="employeeDetails"/>
</h:commandButton>
Это неправильно.Атрибут execute
<f:ajax>
должен указывать на разделенную пробелами коллекцию идентификаторов клиентов компонентов, которые должны быть отправлены и обработаны на стороне сервера (так же, как вы указываете атрибут render
с коллекцией компонентов, разделенных пробелами)идентификаторы клиента, которые должны быть обновлены / перерисованы после запроса ajax).В вашем конкретном случае это должен быть идентификатор таблицы данных или формы или просто @form
для общей ссылки на родительскую форму.
Метод действия, в котором вы передаете идентификатор строки, должен быть определен вaction
атрибут <h:commandButton>
вместо этого.Итак, это должно сделать:
<h:commandButton value="View Details" action="#{backingBean.setCurrentEmployeeId(emp.id)}">
<f:ajax execute="@form" render="employeeDetails"/>
</h:commandButton>
(обратите внимание, что я исправил отсутствующее имя управляемого компонента в методе действия)
Кстати, вы знаете, чтоВы также можете просто передать целые объекты в качестве аргументов в EL?
<h:commandButton value="View Details" action="#{backingBean.setCurrentEmployee(emp)}">
<f:ajax execute="@form" render="employeeDetails"/>
</h:commandButton>
Таким образом, вам не нужно перезагружать сотрудника из БД.