PrimeFaces的cellledit状态维护在哪里?



有人知道PF在哪里/如何维护p: cellleditor的输入或输出方面最后显示的状态吗?我希望能够重置该状态,以便更好地控制PF认为何时需要触发p:dataTable的cellledit事件。

我问,因为我有一个可编辑的屏幕p:dataTable (editMode="cell"),其中用户可以触发p:remoteCommand,而p: cellitor的输入面是打开的,并且p:remoteCommand刷新屏幕,以便所有p: cellleditor返回显示它们的输出面(这是p:remoteCommand部分的正确行为)。问题是,在p:remoteCommand刷新之后,PF似乎认为所有的p: cellleditor仍然显示它们的输入面(即使它们已经返回显示它们的输出面),所以每当用户单击一个单元格时,p:dataTable的cellledit立即被触发,这样单元格只能短暂地从输出面切换到输入面。换句话说,在p:remoteCommand刷新屏幕之后,PF似乎认为任何单击p: cellleditor都应该触发p:dataTable的cellledit事件,因此当用户单击单元格时,他们只会在一眨眼的时间内看到输入面,然后cellledit事件导致单元格翻转回输出面。

关于什么JavaScript或Java代码我可以有我的p:remoteCommand调用重置任何PF正在使用来决定是否是时候触发p:dataTable的cellledit事件的想法?

我使用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>

为了完整起见,这里还有一个用于cellit事件的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;"/>

但老实说,我不喜欢它,因为它看起来很粗俗。

最新更新