PrimeFaces cellEdit状态在哪里维护?

时间:2015-10-12 20:28:06

标签: jsf primefaces

有没有人知道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>

1 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,答案是:

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

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

相关问题