单元格中可编辑的<p:autocomplete> <p:datatable>不调用完成方法

时间:2018-09-28 22:33:12

标签: primefaces jsf-2.2

我有一个dataTable,它具有单元格编辑和全局过滤功能:

<p:dataTable id="tbl01" value="#{userMappingBacking.staffList}" editable="true" editMode="cell" filteredValue="#{userMappingBacking.staffListFiltered}" var="s" rowKey="#{s.id}" widgetVar="tbl101WV">
  ...               
  <f:facet name="header">
     <p:outputPanel>
       <p:toolbar>
         <p:toolbarGroup align="${text.line_start}">
           <p:commandButton value="#{text.save}" action="#{userMappingBacking.saveChanges}" update="msgs"/>
         </p:toolbarGroup>
         <p:toolbarGroup align="${text.line_end}">
           <h:outputText value="#{text.search_all_fields}:"/>
           <p:spacer width="10"/>
           <h:inputText id="globalFilter" onkeyup="PF('tbl101WV').filter()" />
         </p:toolbarGroup>
       </p:toolbar>
     </p:outputPanel>
  </f:facet>
  ...
  <p:column headerText="#{text.user}" filterBy="#{s.userName}" filterable="false">
    <p:cellEditor id="ceUser">
      <f:facet name="output"><h:outputText value="#{s.userName}"/></f:facet>
      <f:facet name="input">
        <p:autoComplete id="acUser" dropdown="true" value="#{s.userName}" completeMethod="#{userMappingBacking.completeUnAssignedUser}"/>
      </f:facet>
    </p:cellEditor>
  </p:column>
</p:dataTable>

并且支持bean userMappingBacking支持所有方法,并且运行良好。

我的问题很奇怪,除非将过滤器应用于表,否则<p:autoComplete id="acUser"...不会调用complete方法,在过滤器应用程序之后一切正常,但是在p中没有任何值完成之前:autoComplete。

任何人都可以帮忙或对此有所了解。

1 个答案:

答案 0 :(得分:0)

我实际上发现问题出在备份bean中,我有3个列表:

staffList = new ArrayList<>();
staffListFiltered = new ArrayList<>();
userDTOList = new ArrayList<>();

我填写了一个viewAction侦听器

public void loadStaffListAction() {
    staffList = zaties.listAllStaff();
    staffListFiltered = zaties.listAllStaff();
    userDTOList = iacw.listAllUsers();
}

问题在于有两个不同的列表staffListstaffListFiltered填充了服务中的不同对象,因此需要更改代码,如下所示:

public void loadStaffListAction() {
    staffList = zaties.listAllStaff();
    staffListFiltered = staffList;
    userDTOList = iacw.listAllUsers();
}

这解决了问题,但是,这不是最佳实践,如下所述。

常见错误:

filtered datatable的原始显示中,永不将filteredValue列表初始化为任何事物,它们保留为null,因此数据表过滤器逻辑以正确的方式对其进行了初始化,请注意对于这个细节,我建议:


除非发生错误,否则不要初始化任何东西。


欢迎评论!

相关问题