p:dataTable 多 select 的 rowSelect 事件没有触发
p:dataTable rowSelect event with multi select doesn't fire
我有 p:datatable 作为
<p:dataTable id="tasktable" rows="5" paginator="true" paginatorPosition="bottom" rowsPerPageTemplate="5,10,25" editable="true" editMode="row" reflow="true"
value="#{taskBean.taskList}" selectionMode="multiple" binding="#{table}" rowKey="#{currentrow[0]}" selection="#{taskBean.selectedTaskList}" var="currentrow"}">
<p:column headerText="Select" id="checkboxSelect" selectionMode="multiple" styleClass='text-md-center com-wdth-5 white'>
</p:column>
<f:facet name="header">
<div>
<p:commandButton id="toggler" type="button" value="Select Columns" icon="ui-icon-calculator" styleClass="btn ad-btn-danger padd mr-b0"/>
<p:columnToggler datasource="tasktable" trigger="toggler" />
</div>
</f:facet>
<p:column id="sno" styleClass="com-wdth-5">
<f:facet name="header"> #{msg['CHSN']} </f:facet>
<h:outputLabel value="#{table.rowIndex + 1}"/>
</p:column>
.
.
.
<p:ajax event="rowSelect" listener="#{taskBean.onRowSelect}" update="@form"/>
</p:dataTable>
With event="rowSelect" and selectionMode multiple, With backing bean code as
public void onRowSelect(SelectEvent event) {
System.out.println("selectedTaskList = "+selectedTaskList.size());
}
但是此 rowSelect 从未触发 并且复选框不是 可选择的,但是如果我 删除 selectionMode="multiple" from p:dataTable,选择启用但事件仍未触发。
而 selectedTaskList 只是一个 arrayList 全局定义为:
私有列表 selectedTaskList = new ArrayList<>();
我错过了其他 p:dataTable 活动。我使用这些事件纠正了它
<p:ajax event="rowSelect" listener="#{taskBean.onRowSelect}" update="@this taskToolbar" />
<p:ajax event="rowUnselect" listener="#{taskBean.onRowUnselect}" update="@this taskToolbar" />
<p:ajax event="rowSelectCheckbox" listener="#{taskBean.onRowSelect}" update="@this taskToolbar" />
<p:ajax event="rowUnselectCheckbox" listener="#{taskBean.onRowUnselect}" update="@this taskToolbar" />
<p:ajax event="toggleSelect" process="@this" update="@this taskToolbar" listener="#{taskBean.onAllRowSelect}"/>
还有我的 Backing Bean 代码
public void onRowSelect(SelectEvent event) {
displayTag();
}
public void onRowUnselect(UnselectEvent event) {
displayTag();
}
public void onAllRowSelect(AjaxBehaviorEvent event) {
displayTag();
}
public void displayTag() {
if (selectedTaskList != null && !selectedTaskList.isEmpty()) {
hideTag = true;
} else {
hideTag = false;
}
}
其中 selectedTaskList 是我在其中保存选定行的列表 table
我有 p:datatable 作为
<p:dataTable id="tasktable" rows="5" paginator="true" paginatorPosition="bottom" rowsPerPageTemplate="5,10,25" editable="true" editMode="row" reflow="true"
value="#{taskBean.taskList}" selectionMode="multiple" binding="#{table}" rowKey="#{currentrow[0]}" selection="#{taskBean.selectedTaskList}" var="currentrow"}">
<p:column headerText="Select" id="checkboxSelect" selectionMode="multiple" styleClass='text-md-center com-wdth-5 white'>
</p:column>
<f:facet name="header">
<div>
<p:commandButton id="toggler" type="button" value="Select Columns" icon="ui-icon-calculator" styleClass="btn ad-btn-danger padd mr-b0"/>
<p:columnToggler datasource="tasktable" trigger="toggler" />
</div>
</f:facet>
<p:column id="sno" styleClass="com-wdth-5">
<f:facet name="header"> #{msg['CHSN']} </f:facet>
<h:outputLabel value="#{table.rowIndex + 1}"/>
</p:column>
.
.
.
<p:ajax event="rowSelect" listener="#{taskBean.onRowSelect}" update="@form"/>
</p:dataTable>
With event="rowSelect" and selectionMode multiple, With backing bean code as
public void onRowSelect(SelectEvent event) {
System.out.println("selectedTaskList = "+selectedTaskList.size());
}
但是此 rowSelect 从未触发 并且复选框不是 可选择的,但是如果我 删除 selectionMode="multiple" from p:dataTable,选择启用但事件仍未触发。 而 selectedTaskList 只是一个 arrayList 全局定义为: 私有列表 selectedTaskList = new ArrayList<>();
我错过了其他 p:dataTable 活动。我使用这些事件纠正了它
<p:ajax event="rowSelect" listener="#{taskBean.onRowSelect}" update="@this taskToolbar" />
<p:ajax event="rowUnselect" listener="#{taskBean.onRowUnselect}" update="@this taskToolbar" />
<p:ajax event="rowSelectCheckbox" listener="#{taskBean.onRowSelect}" update="@this taskToolbar" />
<p:ajax event="rowUnselectCheckbox" listener="#{taskBean.onRowUnselect}" update="@this taskToolbar" />
<p:ajax event="toggleSelect" process="@this" update="@this taskToolbar" listener="#{taskBean.onAllRowSelect}"/>
还有我的 Backing Bean 代码
public void onRowSelect(SelectEvent event) {
displayTag();
}
public void onRowUnselect(UnselectEvent event) {
displayTag();
}
public void onAllRowSelect(AjaxBehaviorEvent event) {
displayTag();
}
public void displayTag() {
if (selectedTaskList != null && !selectedTaskList.isEmpty()) {
hideTag = true;
} else {
hideTag = false;
}
}
其中 selectedTaskList 是我在其中保存选定行的列表 table