【问题标题】:Where is PrimeFaces cellEdit state maintained?PrimeFaces cellEdit 状态在哪里维护?
【发布时间】:2015-10-12 20:28:05
【问题描述】:

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

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

关于我可以让我的 p:remoteCommand 调用什么 JavaScript 或 Java 代码来重置任何 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>

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

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

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

    但老实说,我不喜欢它,因为它看起来充其量是 hacky。

    【讨论】:

    • 感谢阿卡迪乌斯!我早就继续前进了,我什至不记得我是否解决了这个问题或者我是如何做到的,但我真的很感激这个信息,如果/当我再次遇到这个问题时!
    猜你喜欢
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多