【问题标题】:p:dataTable rowSelect event with multi select doesn't firep:dataTable rowSelect 带有多选的事件不会触发
【发布时间】:2020-05-12 19:12:14
【问题描述】:

我有 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>

使用 event="rowSelect" 和 selectionMode 多个,使用 backing bean 代码作为

public void onRowSelect(SelectEvent event) {

    System.out.println("selectedTaskList = "+selectedTaskList.size());
}

但是这个 rowSelect 从未触发并且复选框不是可选择的,但是如果我从 p:dataTable 删除 selectionMode="multiple",选择启用但仍然没有触发事件。 而 selectedTaskList 只是一个全局定义为的 arrayList: 私有列表 selectedTaskList = new ArrayList();

【问题讨论】:

  • 1) 否 minimal reproducible example(例如,删除可编辑、绑定、css 是否可以工作?,bean 在哪里),2) 没有版本信息,3) 没有关于调试内容的信息(客户端和服务器端)。请改进问题
  • 只是我的好奇心/无知,使用#{currentrow[0]},使用哪个字段?字母/定义顺序?其他的?有效吗?
  • @WoAiNii 我将 dataTable 中的数据作为对象 [] 列表传递,因此在托管 bean 中的 currentrow[0] 处,我正在获取已通过的行的主键 ID。
  • ok 所以我添加了这些事件,,但是这个 toggleSelect选择所有行会给出未找到方法的异常
  • 应用这些事件后,现在可以选择行了!

标签: jsf primefaces


【解决方案1】:

我错过了其他 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}"/>

还有我的支持 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 是我保存选定表行的列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-29
    • 2013-01-15
    • 1970-01-01
    • 2019-11-17
    • 2020-04-26
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多