внутри ячейки редактируемыене вызывая полный метод - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть 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>

и вспомогательный компонент userMappingBacking поддерживает все методы и отлично работает.

Моя проблема довольностранно, что <p:autoComplete id="acUser"... не вызывает полный метод, если к таблице не применен фильтр, после применения фильтра все работает нормально, но до этого никакие значения не завершаются в p: autoComplete.

Может ли кто-нибудь помочь или дать представление об этом.

1 Ответ

0 голосов
/ 29 сентября 2018

Я действительно обнаружил, что проблема в компоненте поддержки, у меня было 3 списка:

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

, которые я заполняю слушателем viewAction

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

проблема была в 2разные списки staffList и staffListFiltered заполнены различными объектами из сервиса, поэтому изменили код следующим образом:

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

, и это решило проблему, тем не менее, это не лучшая практика, как объясняется ниже.

Распространенная ошибка:

в витрине простых лиц для отфильтрованных данных никогда не инициализировать список filteredValue для чего-либо, они оставляют егокак null, так что логика фильтра данных с возможностью инициализации корректно инициализирует его, обращая внимание на эту деталь, я советую:


Не инициализируйте ничего, пока не получите ошибку.


комментарии приветствуются!

...