【问题标题】:Cell edit in primefaces is not updating the valueprimefaces 中的单元格编辑不会更新值
【发布时间】:2011-09-15 23:46:21
【问题描述】:

我的 primefaces 应用程序中有一个数据表。前端的代码有

    <!-- Start of customer datatable -->
            <p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}" 
            selectionMode="single" onRowSelectUpdate=":custList" onRowSelectComplete="custTab.show()" id="custList" widgetVar="custList" update=":custList">
                <f:facet name="header">
                List of Customers
                    <p:outputPanel>
                        <p:commandButton value="+" type="button" onclick="addCustDlg.show()"/>
                     </p:outputPanel>
                </f:facet>


                <p:column sortBy="#{customer.id}" filterBy="#{customer.id}" update=":custList">
                    <f:facet name="header">
                        <h:outputText value="ID"/>
                    </f:facet>
                    <h:outputText value="#{customer.id}"/>
                </p:column>

                <p:column sortBy="#{customer.name}" filterBy="#{customer.name}" headerText="NAME" filterMatchMode="contains" update=":custList">
                  <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{customer.name}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{customer.name}"/>
                    </f:facet>
                  </p:cellEditor>
                </p:column>

                <p:column sortBy="#{customer.description}" filterBy="#{customer.description}" headerText="DESCRIPTION">
                  <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{customer.description}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{customer.description}"/>
                    </f:facet>
                  </p:cellEditor>
                </p:column>

                <p:column sortBy="#{customer.signupDate}" filterBy="#{customer.signupDate}" headerText="SIGN UP DATE">
                    <f:facet name="output">
                        <h:outputText value="#{customer.signupDate}"/>
                    </f:facet>
                </p:column>

                <p:column sortBy="#{customer.validUntil}" filterBy="#{customer.validUntil}" headerText="EXPIRY DATE">
                  <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{customer.validUntil}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{customer.validUntil}"/>
                    </f:facet>
                  </p:cellEditor>
                </p:column>

                <p:column sortBy="#{customer.status}" filterBy="#{customer.status}" headerText="STATUS">
                  <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{customer.status}"/>
                    </f:facet>
                    <f:facet name="input">
                        <p:inputText value="#{customer.status}"/>
                    </f:facet>
                  </p:cellEditor>
                </p:column>

                <p:column headerText="CREATION DATE" sortBy="#{customer.creationDate}" filterBy="#{customer.creationDate}">
                    <f:facet name="output">
                        <h:outputText value="#{customer.creationDate}"/>
                    </f:facet>
                </p:column>

                <p:column headerText="LAST UPDATE DATE" sortBy="#{customer.lastUpdateDate}" filterBy="#{customer.lastUpdateDate}">
                    <f:facet name="output">
                        <h:outputText value="#{customer.lastUpdateDate}"/>
                    </f:facet>
                </p:column>

                <p:column headerText="Options">
                    <p:rowEditor/>
                </p:column>

            </p:dataTable>
            <!-- End of dataTable (customer datatable) -->

并且处理rowEvent的函数在bean中指定为

 public void custRowEdit(RowEditEvent event){
    Customer cust = (Customer) event.getObject();
    EntityManagerHelper.beginTransaction();
    custDao.update(cust);
    EntityManagerHelper.commit();
}

但是,在更新事件中,当我编辑表格中的单元格时,我没有获得属性的新更新值。

如下图所示,当我将 ID 为 1 的条目的状态从 11 编辑为 4 时,在函数 custRowEdit 中,当我尝试获取客户对象时,我仍然得到客户的状态为 11 和不是 4 。

谁能帮助我理解为什么没有设置单元格的值?

【问题讨论】:

  • 您解决了这个问题吗?

标签: jsf facelets primefaces


【解决方案1】:

从您调用 custRowEdit(RowEditEvent event) 方法的位置。我在你的代码中没有任何相关的东西。

为了让你的监听器调用在你的数据表声明中添加下面的属性。

rowEditListener="#{customerBean.listenerInBackingBean}"

<p:dataTable var="customer" value="#{customerBean.customers}" paginator="true" selection="#{customerBean.selectedCustomer}" 
            selectionMode="single" onRowSelectUpdate=":custList" onRowSelectComplete="custTab.show()" id="custList" widgetVar="custList" update=":custList">
                <f:facet name="header"

rowEditListener="#{customerBean.cutRowEvent}"
>

【讨论】:

  • 我的错......我在 dataTable 中指定了 rowEditListener 。但是,问题仍然存在。我仍然得到了陈旧的价值,而不是更新的价值
【解决方案2】:

检查 customerBean.customers 的实现。每次调用该方法时,我都会从数据库中重新加载内容。错误的。这应该发生在构造函数中。现在一切正常。还以为是 JavaScript 错误...

【讨论】:

    【解决方案3】:

    感谢这对我有帮助。

    我可以补充一点,而不是从构造函数中的查询加载列表,如果一个有一个@SessionScoped 托管 bean,则可以使用 reset() 方法将列表重置为 null,然后从查询中懒惰地填充列表.然后可以使用 f:event 在页面加载时调用重置:

        <f:view>
            <f:metadata>
                <f:event type="preRenderView" listener="#{sessionScopedBean.reset}"/>
            </f:metadata>
        </f:view>        
    

    【讨论】:

      【解决方案4】:

      您错过了 p:ajax 事件来触发单元格编辑后的方法、函数或您想做的任何事情

      有点像

      <p:ajax event="cellEdit" listener="#{mBean.onCellEdit}" update="elementX" />
      

      【讨论】:

      • 这更适合发表评论,因为它不是真正的答案
      【解决方案5】:

      我遇到了类似的情况,通过从数据表中删除 update="" 标记得到了解决。表的默认行为是更新行,在我的例子中,这显然没有发生。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-16
        • 2014-08-03
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        • 1970-01-01
        • 2014-03-08
        • 2017-10-23
        相关资源
        最近更新 更多