【问题标题】:primefaces rowediting datatable ejb update returns old dataprimefaces 行编辑数据表 ejb 更新返回旧数据
【发布时间】:2012-08-08 23:44:20
【问题描述】:

Salut :),我是 primefaces 和 ajax 的新手

我正在使用 primefaces 3.4、glassfish 3.1、jsf2.0 和 ejb 3。我尝试实现 primefaces 展示数据表行编辑。但是当我将更新的值验证到数据表中时,我得到了旧值。这是我的代码:

<h:form id="form">
<p:growl id="messages" showDetail="true"/>
<p:dataTable var="item" value="#{jSFMBean.allContacts}" id="contactList" editable="true">
    <p:ajax event="rowEdit" listener="#{jSFMBean.onEdit}" update="@this :form:messages" />
    <p:ajax event="rowEditCancel" listener="#{jSFMBean.onCancel}" update=":form:messages" />
        <p:column headerText="EMAIL" style="width:125px">
                    <p:cellEditor>
                        <f:facet name="output">
                            <h:outputText value="#{item.email}" />
                        </f:facet>
                        <f:facet name="input">
                            <p:inputText value="#{item.email}" label="EMAIL"/>
                        </f:facet>
                    </p:cellEditor>
                </p:column><p:column headerText="Options" style="width:50px"> 
                    <p:rowEditor />
                </p:column>
     </p:dataTable>
<h:outputText value="#{jSFMBean.selectedContact.displayname}" />

方法是:

  public void onEdit(RowEditEvent event) {
    this.session.updateContact((Contacts) event.getObject());
    FacesMessage msg = new FacesMessage("Edition contact: ", ((Contacts) event.getObject()).getDisplayname());

    FacesContext.getCurrentInstance().addMessage(null, msg);
}

(Contacts) event.getObject() 总是获取旧值 :(。这就像在 ajax 更新到数据库之前首先启动数据表的 getter。

我做错了什么?感谢您帮助解决这个问题。

【问题讨论】:

    标签: primefaces datatable ejb row edit


    【解决方案1】:

    目前您正在编辑对象中的值。看起来您仍然需要回调数据库以更新那里的值。

    【讨论】:

      【解决方案2】:

      似乎每当您需要数据表时,您都是从数据库中获取它,这就是为什么 event.getObject() 总是返回旧值。因此,您需要在数据表的 getter 中添加:

      if (allContacts== null){
      
              allContacts= (List<Contacts>) yourservice.getAll();  /*this refers to the function that get the list from the database*/
      
          }
      
          return allContacts;
      

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        很可能问题出在您的支持 bean 上。如果你使用@Named 注解而不是@ManagedBean (javax.faces.bean.ManagedBean) 作为你的backing bean,你就会面临这种问题。简单替换

        @Named (value="YourBeanName")

        @ManagedBean (name="YourBeanName")

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-20
          • 1970-01-01
          • 2014-08-03
          • 2014-01-20
          • 2017-10-23
          • 2014-10-08
          • 2013-09-15
          • 2016-09-15
          相关资源
          最近更新 更多