2

我对数据表的单元格编辑模式有疑问。

我每行只有一个单元格需要进行编辑。

我可以编辑它,但更改后的值不会显示。虽然奇怪的是,当我重新编辑同一个单元格时,会显示更改的值。

onChange调用是对服务器端 bean 进行的,但旧值和新值都相同。

基于类似于陈列柜的示例,不显示咆哮消息。

这是完整的xhtml代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- jsf:pagecode language="java" location="/src/main/java/pagecode/ManageIniFile.java" --><!-- /jsf:pagecode -->
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:p="http://primefaces.org/ui"
   template="theme/ccd.xhtml">
   <ui:define name="body-content">

      <center>
         <h:form styleClass="form" id="form">

            <p:growl id="messages" showDetail="true"/>

            <h:panelGrid columns="1" cellpadding="20" width="50%">
               <h1 class="title ui-widget-header ui-corner-all">Manage Environments</h1>
                  <div class="entry">

                     <p:tabView id="tabView" var="section" value="#{iniFile.sections}">

                        <p:tab id="sectionTab" title="#{section}">

                           <p:dataTable var="entry" value="#{iniFile.getEntries(section)}" editable="true" editMode="cell">

                              <p:ajax event="cellEdit" listener="#{pc_ManageIniFile.onCellEdit}" update=":form:messages" />

                              <p:column headerText="Entry">
                                    <h:outputText value="#{entry.entry}" />
                              </p:column>

                              <p:column headerText="Value">
                                  <p:cellEditor>
                                         <f:facet name="output"><h:outputText value="#{entry.value}" /></f:facet>
                                         <f:facet name="input"><p:inputText value="#{entry.value}" style="width:46%" label="Value" /></f:facet>
                                   </p:cellEditor>
                              </p:column>

                            </p:dataTable>

                        </p:tab>

                     </p:tabView>

                     <h:panelGrid columns="2" width="50%">
                        <h:commandButton type="submit" value="Add Environment" styleClass="loginButton" id="addSection" />
                        <h:commandButton type="submit" value="Save Environment" styleClass="loginButton" id="saveFile" />
                     </h:panelGrid>

                  </div>
            </h:panelGrid>
         </h:form>
      </center>

   </ui:define>
</ui:composition>

具有 onCellEdit() 方法的页面代码 bean 如下:

public void onCellEdit(CellEditEvent event)
{
    Object oldValue = event.getOldValue();
    Object newValue = event.getNewValue();

    System.out.println("oldValue=" + oldValue);
    System.out.println("newValue=" + newValue);

    if (newValue != null && !newValue.equals(oldValue))
    {
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

不管我在编辑什么,oldValue总是等于newValue. :哭:

比我更了解的人可以提供任何建议吗?

一旦这个页面工作,应用程序就完成了。

谢谢,

-克里斯

作为后续,我尝试了 Mojarra 2.2.6 和 MyFaces 2.2.2 以及 PF 4 和 5.0.RC1。同样的结果。我不认为单元格编辑在 tabView 中起作用。我已经设法让展示示例正常工作,所以我知道单元格编辑适用于 WAS 8.5.5.1 和 MF 2.2.2。

4

2 回答 2

0

当发生验证错误时,我能够复制由 PrimeFaces 4.0 CE 中的 javascript 问题引起的问题。我升级到使用 4.0.6 UR2(非官方版本)http://primefaces.github.io/

来源:https ://github.com/primefaces/primefaces/tree/4.0.6-UR2 (从源代码构建)。

似乎该错误已在 ELITE 版本中修复,并针对 PrimeFaces 5 进行了修复,并已发布到非官方版本中 - 我认为它已在 4.0.3 中修复,此问题报告如下:

https://code.google.com/p/primefaces/issues/detail?id=6312

编辑* 在与您讨论并实际深入研究之后 - 我们确定这是因为您的条目试图是动态的,但没有存储为页面范围内的变量,因此它没有任何参考。

干杯

于 2014-04-07T11:09:20.667 回答
0

获取数据模型是问题的一部分,另一个是我被 EL 做更多事情的能力误导了,在这种情况下调用函数。

原始代码是:

<p:dataTable id="envEntries" var="entry" value="#{iniFile.getEntries(section)}" editable="true" editMode="cell" >

虽然这正确呈现,但它是我所有 onCellEdit() 问题的原因,因为尽管请求映射是正确的(所以我可以自己捏造它 - 但这不是重点)JSF 找不到允许的值正确的 onCellEdit() 操作。

工作代码是:

<p:dataTable id="envEntries" var="entry" value="#{iniFile.entries}" editable="true" editMode="cell">

所以我必须以一种允许它与 JSF 一起工作的方式维护数据模型。

一旦我完成了所有这些,该应用程序就会按预期工作。

-克里斯

于 2014-04-24T01:30:30.463 回答