2015-10-12 66 views
1

有沒有人知道PF在何處/如何維護p:cellEditor的輸入或輸出面是否最後顯示的狀態?我希望能夠重置該狀態以更好地控制PF何時認爲它需要觸發p:dataTable的cellEdit事件。PrimeFaces cellEdit狀態在哪裏維護?

我問,因爲我有一個可編輯的p:dataTable(editMode =「cell」)屏幕,用戶可以在ap:cellEditor的輸入面打開時觸發ap:remoteCommand,並且p:remoteCommand刷新這樣所有的p:cellEditor都會回到顯示它們的輸出面(這在p:remoteCommand的部分是正確的行爲)。問題是,在p:remoteCommand的刷新之後,PF似乎認爲所有p:cellEditor仍然顯示它們的輸入方面(即使它們已經回到顯示它們的輸出方面),所以無論何時用戶單擊一個單元,p :dataTable的cellEdit被立即觸發,使得單元格只從其輸出面切換到其輸入面。換句話說,在p:remoteCommand刷新屏幕之後,PF似乎認爲ap:cellEditor上的任何點擊都應該觸發p:dataTable的cellEdit事件,因此當用戶單擊某個單元格時,他們只會看到閃爍的輸入面cellEdit事件之前的眼睛導致單元翻轉回輸出面。

關於什麼JavaScript或Java代碼的任何想法我可以讓我的p:remoteCommand調用重置PF正在使用的任何東西來決定是否是時候觸發p:dataTable的cellEdit事件?

我在使用PF 5.1.13和Wildfly 9.0.1。

僅供參考,這裏是(消毒)P:dataTable的

<h:form id="form"> 
<p:outputPanel styleClass="tablesPanel" id="tablesPanel"> 
    <c:forEach var="table" items="#{view.tables}">    
     <p:dataTable id="table-#{table.tableIdSuffix}" widgetVar="tableWidget-#{table.tableIdSuffix}" value="#{table.rowAsList}" var="row" styleClass="compressed no-highlight" editable="#{view.allowEdit()}" editMode="cell"> 
        <p:ajax event="cellEdit" listener="#{view.handleCellEdit}" oncomplete="onCellEdit()"/> 
        <p:columns value="#{table.row.cells}" var="cell"> 
         <f:facet name="header"> 
          <h:outputText value="#{cell.columnHeader}"/> 
         </f:facet> 
         <p:cellEditor> 
          <f:facet name="output"> 
           <h:outputText rendered="#{view.allowEdit()}" styleClass="btn-link" value="#{cell.displayText}"/> 
           <h:outputText rendered="#{!view.allowEdit()}" value="#{cell.displayText}"/> 
          </f:facet> 
          <f:facet name="input"> 
           <p:selectOneMenu id="selectedCellType-#{table.tableIdSuffix}-#{cell.id}" value="#{cell.valueTypeId}" style="width: 50px" > 
            <f:selectItems value="#{view.valueTypes}" var="vt" itemLabel="#{vt.displayPrefix}" itemValue="#{vt.id}"/> 
           </p:selectOneMenu> 
           <p:inputText id="selectedCellValue-#{table.tableIdSuffix}-#{cell.id}" value="#{cell.value}" converter="#{bigDecimalConverter}" style="width: 40px;margin-bottom: 17px"/> 
           <p:selectOneMenu id="selectedCellUnit-#{table.tableIdSuffix}-#{cell.id}" value="#{cell.unitId}" style="width: 80px"> 
            <f:selectItems value="#{view.units}" var="u" itemLabel="#{u.displaySuffix}" itemValue="#{u.id}"/> 
           </p:selectOneMenu> 
          </f:facet> 
         </p:cellEditor> 
        </p:columns> 
     </p:dataTable> 
    </c:forEach> 
</p:outputPanel> 
</h:form> 

而這裏的,而細胞的輸入方面是開放

<h:form id="changeGroupForm" class="hide"> 
    <p:remoteCommand name="ajaxGroupUpdate" actionListener="#{view.refreshTables()}" update=":form:tablesPanel"/> 
    <p:inputText id="groupId" value="#{view.groupId}"/> 
</h:form> 

爲了完整,可以調用(消毒)remoteCommand ,此處也是cellEdit事件的oncomplete屬性的(消毒的)remoteCommand

<h:form> 
    <p:remoteCommand name="onCellEdit" action="#{view.reportCellEdit()}" update=":form:tablesPanel"/> 
</h:form> 

回答

1

我只是有完全相同的問題,答案是:

<p:remoteCommand name="onCellEdit" update="tableId" oncomplete="PF('tableId').currentCell=null;"/> 

但老實說,我不喜歡,因爲它似乎哈克充其量。

+0

謝謝Arkadiusz!我很久以前就繼續前進,我甚至不記得我是否曾經爲此工作過,或者我是如何做到的,但是我真的很感謝這裏的信息,如果/當我再次遇到這個問題時! –