我使用的是:
服务器:Wildfly 8.2JSF: 2.2Primefaces: 5.2JDK: 8
我有一个多重选择的数据表。我使用rowSelectMode='add'
,所以点击不同的行没有修改键添加新行,而不是取消选择所有选定的。
<p:dataTable id="table"
value="#{ixController.files}"
var="item" paginatorTemplate="{FirstPageLink} {PreviousPageLink}
{PageLinks}
{NextPageLink} {LastPageLink}"
selection="#{ixController.selecteds}"
rowKey="#{item.id}"
rowSelectMode="add"
selectionMode="multiple">
<p:column headerText="Files">
#{item.fileName}
</p:column>
如前所述,它可以很好地添加行,但是我需要按Ctrl取消选择行,客户希望再次单击行并取消选择。
这可能吗?
使用复选框,这样他们可以选择和取消选择,只需点击它,以Prime Faces为例:
<p:dataTable id="checkboxDT" var="car" value="#{dtSelectionView.cars6}" selection="#{dtSelectionView.selectedCars}" rowKey="#{car.id}" style="margin-bottom:0">
<f:facet name="header">
Checkbox
</f:facet>
<p:column selectionMode="multiple" style="width:16px;text-align:center"/>
<p:column headerText="Id">
<h:outputText value="#{car.id}" />
</p:column>
<p:column headerText="Year">
<h:outputText value="#{car.year}" />
</p:column>
<p:column headerText="Brand">
<h:outputText value="#{car.brand}" />
</p:column>
<p:column headerText="Color">
<h:outputText value="#{car.color}" />
</p:column>
<f:facet name="footer">
<p:commandButton process="checkboxDT" update=":form:multiCarDetail" icon="ui-icon-search" value="View" oncomplete="PF('multiCarDialog').show()" />
</f:facet>
</p:dataTable>
我找不到这个属性,但是,有一种方法:
<p:dataTable value="#{groupBean.groups}" var="grp" rowKey="#{grp.id}"
selectionMode="single" selection="#{groupBean.group}">
<p:ajax event="rowSelect" listener="#{groupBean.onRowSelect}" update="@all" />
可以看到,当单击一行时,selectedItem
设置为groupBen.goup
对象。
public void onRowSelect(SelectEvent event) {
if (prevGroupId == group.getId())
group = new PersonelGroup();
else
prevGroupId = group.getId();
}
在onRowSelect
方法中,您可以通过比较之前选择的项目id来检查用户是否第二次单击同一行。通过实例化group
对象为new, DataTable被更新为无选择状态。
重要的是不要忘记添加update="@all"
属性的DataTable