primefaces rowediting datatable ejb update返回旧数据

时间:2012-08-08 23:44:20

标签: primefaces datatable ejb row edit

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

我使用primefaces 3.4,glassfish 3.1,jsf2.0和ejb 3.我试图实现primefaces展示datatable rowediting。但是当我将更新后的值验证到数据表中时,我得到了旧值。这是我的代码:

<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更新到数据库之前的数据表fireup的getter一样。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

似乎每当你需要dataTable时,你就是从数据库中获取它,这就是为什么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;

我希望这对你有所帮助。

答案 2 :(得分:0)

最有可能的问题是你的支持bean。如果您使用@Named注释而不是@ManagedBean(javax.faces.bean.ManagedBean)作为支持bean,则会遇到此类问题。只需更换

  

@Named(value =“YourBeanName”)

  

@ManagedBean(name =“YourBeanName”)