Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 带分页的Primefaces数据表rowIndexVar_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf 2 带分页的Primefaces数据表rowIndexVar

Jsf 2 带分页的Primefaces数据表rowIndexVar,jsf-2,primefaces,datatable,Jsf 2,Primefaces,Datatable,我使用的是具有单行选择和分页的primefaces数据表。对于每一行,我都有一些commandlinks(其中一个已禁用),我希望用户单击这些commandlinks对该行执行操作(例如:删除、编辑)。 为了提供用户单击右行按钮的视觉确认,我希望在单击后选择该行,然后继续使用所需的bean方法。 如果该表只有一页或是第1页,则该操作按预期进行;在所有其他页面上,我得到一个NullPointerException。 我找到了发生这种情况的原因:我使用rowIndexVar执行选择,但它似乎返回了与

我使用的是具有单行选择和分页的primefaces数据表。对于每一行,我都有一些commandlinks(其中一个已禁用),我希望用户单击这些commandlinks对该行执行操作(例如:删除、编辑)。 为了提供用户单击右行按钮的视觉确认,我希望在单击后选择该行,然后继续使用所需的bean方法。 如果该表只有一页或是第1页,则该操作按预期进行;在所有其他页面上,我得到一个NullPointerException。
我找到了发生这种情况的原因:我使用rowIndexVar执行选择,但它似乎返回了与整个表相关的索引,selectRow方法需要与当前页面相关的索引。这意味着,如果我每页有10行,并单击第二页的第三行,则返回的索引是“12”,而不是“2”,selectRow(12,false)返回null,因为该页上只有10个项目

我的问题是:如何传递正确的行索引,以便在所有页面上获得正确的选择?

支持bean是viewscope的,方法也不是什么特别的东西,但是因为它有很多与webservices和jaxb生成的类相关的代码,并且我签署了一个NDA,所以我不能将它粘贴到这里(我已经通过共享datatable代码来推送它)


我正在使用JSF2.0和PrimeFaces3.4.2


提前感谢

使用此功能可以从分页器获取当前页面:

itemsTable.paginator.getCurrentPage()
因此,我们可以根据这个值计算正确的行索引,#{rowIndex}的值和每页的最大行数

 <h:commandLink onclick="itemsTable.unselectAllRows(); itemsTable.selectRow(#{rowIndex}-itemsTable.paginator.getCurrentPage()*10)" action="#{dgRefTypePubBean.editSelectedItem()}">
      <h:graphicImage library="images" name="edit-text.png" width="15" height="15" style="border:none" />
 </h:commandLink>

我希望这有帮助


问候。

谢谢你的回复,尽管一年后才收到,呵呵。事实上,这在一定程度上解决了这个问题,因为有一个rowsPerPageTemplate允许用户选择每页的行数。当然,如果一个人也能得到这个数字(我相信这是可能的),那么问题就解决了。我希望这有助于将来的其他人,因此我将选择您的答案作为解决方案;)
 <h:commandLink onclick="itemsTable.unselectAllRows(); itemsTable.selectRow(#{rowIndex}-itemsTable.paginator.getCurrentPage()*10)" action="#{dgRefTypePubBean.editSelectedItem()}">
      <h:graphicImage library="images" name="edit-text.png" width="15" height="15" style="border:none" />
 </h:commandLink>