[英]Where is PrimeFaces cellEdit state maintained?
有人知道上次顯示ap:cellEditor的輸入或輸出構面時PF在何處/如何維護狀態嗎? 我希望能夠重置該狀態,以便更好地控制PF何時需要觸發ap:dataTable的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事件之前的眼睛使該單元格翻轉回輸出構面。
關於可以使p:remoteCommand調用以重置PF用於確定是否觸發ap:dataTable的cellEdit事件的時間的JavaScript或Java代碼的任何想法?
我在Wildfly 9.0.1中使用PF 5.1.13。
供參考,這是(經過消毒的)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>
這是打開單元格的輸入構面時可以調用的(經過消毒的)remoteCommand
<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>
為了完整起見,這也是cellEdit事件的oncomplete屬性的(經過消毒的)remoteCommand
<h:form>
<p:remoteCommand name="onCellEdit" action="#{view.reportCellEdit()}" update=":form:tablesPanel"/>
</h:form>
我只是有完全相同的問題,答案是:
<p:remoteCommand name="onCellEdit" update="tableId" oncomplete="PF('tableId').currentCell=null;"/>
但說實話我不喜歡,因為充其量似乎很黑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.