繁体   English   中英

PrimeFaces cellEdit状态保持在哪里?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM