有没有人知道PF在哪里/如何保持状态,以确定p:cellEditor的输入或输出方面是否最后显示?我希望能够重置该状态,以便更好地控制PF何时认为需要触发p:dataTable的cellEdit事件。
我问,因为我的屏幕上有一个可编辑的p:dataTable(editMode =“cell”),用户可以在ap:cellEditor的输入方面打开时触发ap:remoteCommand,并且p:remoteCommand刷新屏幕这样所有p:cellEditors都会返回显示它们的输出方面(这是p:remoteCommand部分的正确行为)。问题是在p:remoteCommand刷新之后,PF似乎认为所有p:cellEditors仍然显示其输入方面(即使它们已经返回显示其输出方面),因此每当用户单击一个单元格时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>
这是可以在单元格的输入构面打开时调用的(已消毒的)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>
答案 0 :(得分:1)
我遇到了完全相同的问题,答案是:
<p:remoteCommand name="onCellEdit" update="tableId" oncomplete="PF('tableId').currentCell=null;"/>
但老实说,我不喜欢,因为它看起来很好看。