Как перейти от основного к подробному представлению о событии rowSelect в JSF - PullRequest
0 голосов
/ 12 ноября 2018

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>

Очевидно, что я делаю что-то неправильно.

1 Ответ

0 голосов
/ 14 ноября 2018
    public void onRowSelect(SelectEvent event) throws IOException {
     setItem(listItem); //you need to set the item before you try to access
     FacesContext.getCurrentInstance().getExternalContext().redirect("edit.xhtml?faces-redirect=true&id=" + listItem.getId());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...