BalusC показывает здесь , что для осуществления навигации мы можем использовать
<h:column>
<h:link value="Edit" outcome="/products/edit">
<f:param name="id" value="#{product.id}" />
</h:link>
</h:column>
, что хорошо, но как сделать то же самое, если я не хочу дополнительный столбецв качестве навигации - я хочу сделать это, нажав на строку.
То, что я пробовал.List.xhtml:
<p:dataTable id="datalist" ....>
<p:ajax event="rowSelect" listener="#{listController.onRowSelect}" />
Что относится к bean-компоненту:
public void onRowSelect(SelectEvent event) throws IOException {
FacesContext.getCurrentInstance().getExternalContext().redirect("edit.xhtml?faces-redirect=true&id=" + listItem.getId());
}
, и это фактически приводит меня к новой странице после нажатия на строку в таблице данных, URL-адрес:
http://localhost/app/faces/edit.xhtml?faces-redirect=true&id=1686
, поэтому добавляется идентификатор строки в datatable.Что происходит, конечно, NULL:
javax.el.PropertyNotFoundException: /edit.xhtml @18,84 value="#{listController.item.id}": Target Unreachable, 'null' returned null
edit.xhtml:
<ui:composition template="/template.xhtml">
<ui:define name="body">
<h:form id="itemForm">
<f:metadata>
<f:viewParam name="id" value="#{listController.item.id}" />
</f:metadata>
Очевидно, что я делаю что-то неправильно.