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