在没有绑定属性的情况下单击 h:CommandLink 访问 Backing Bean 中 p:datatable 的特定行

Access particular row of p:datatable in Backing Bean on click of h:CommandLink without binding attribute

请在下方找到我的 p:datatable 代码,其列之一是 h:commandlink:

   <p:dataTable id="listTable" value="#{listBean.lazyDatalist}"
                         var="list" paginator="true" paginatorPosition="top" rows="10"
                         rowIndexVar="rowIndex" 
                        rowStyleClass="#{(rowIndex mod 2) eq 0 ? 'rowStyleOdd' : 'rowStyleEven'}" 
                        lazy="true">
                        <p:ajax event="page" listener="#{listBean.searchLazyData}"/>
                        <p:column style="width:3%;" headerText="#{msg['userlist.dt.srNo']}">
                            <h:outputText value="#{list.orderCount}"></h:outputText>
                        </p:column>                 
                        <p:column  style="width:7%;"
                            headerText="#{msg['userlist.dt.EmployeeID']}">
                        <h:outputText value="#{list.employeeID}"/>  
                        </p:column>
                        <p:column  style="width:12%;"
                            headerText="#{msg['userlist.dt.Name']}">
                        <h:outputText value="#{list.employeeName}"></h:outputText>  
                        </p:column>
                        <p:column headerText="#{msg['userlist.dt.actionReq']}">
                                <h:commandLink value="#{list.actionRequired}" action="#{listBean.getDetails}" styleClass="linkStyle"></h:commandLink>                       
                        </p:column>
                    </p:dataTable>

我想访问 Backing Bean ListBean 中的数据表行,在不使用数据表绑定属性的情况下使用 action="#{listBean.getDetails}" 单击 h:commandLink。

我的 Backingbean 是会话范围的,我们使用的是 jsf 2.1.7 Mojarra。

将选定的行作为参数传递给您的方法,例如

<h:commandLink value="#{list.actionRequired}" action="#{listBean.getDetails(list)}" styleClass="linkStyle"></h:commandLink> 

并更改 getDetails 以接受元素类型为 listBean.lazyDatalist

的参数

var 包含用于填充每一行的对象。你可以像 #{listBean.getDetails(list)} 这样在你的动作中传递它。不要忘记将此参数添加到您的 bean 方法中。

顺便说一句:list 非常具有误导性。您最好将其命名为 element 或使用它的具体实体名称,也许 employee。您的团队将不胜感激。

但最重要的是,请看一下 PrimeFaces 展示柜中的第一个选择示例 http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml