Primefaces 编辑数据表ejb更新返回旧数据

Primefaces 编辑数据表ejb更新返回旧数据,primefaces,datatable,ejb,row,edit,Primefaces,Datatable,Ejb,Row,Edit,敬礼:),我是primefaces和ajax的新手 Iam使用primefaces 3.4、glassfish 3.1、jsf2.0和EJB3。我尝试实现primefaces showcase数据表行编辑。但是,当我将更新后的值验证到datatable中时,我会得到旧值。这是我的代码: <h:form id="form"> <p:growl id="messages" showDetail="true"/> <p:dataTable var="item" value

敬礼:),我是primefaces和ajax的新手

Iam使用primefaces 3.4、glassfish 3.1、jsf2.0和EJB3。我尝试实现primefaces showcase数据表行编辑。但是,当我将更新后的值验证到datatable中时,我会得到旧值。这是我的代码:

<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}" />
(Contacts)event.getObject()始终获取旧值:(。这就像在ajax更新数据库之前先获取datatable fireup的getter一样


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

目前你正在编辑对象中的值。看起来你仍然需要回拨数据库以更新其中的值。

最可能的问题是你的支持bean。如果你使用了@Named annotation而不是@ManagedBean(javax.faces.bean.ManagedBean)对于您的支持bean,您将面临此类问题

@命名(value=“YourBeanName”)

@ManagedBean(name=“YourBeanName”)


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

if (allContacts== null){

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

    }

    return allContacts;
if(allContacts==null){
allContacts=(List)yourservice.getAll();/*这是指从数据库获取列表的函数*/
}
返回所有联系人;
我希望这能对你有所帮助

if (allContacts== null){

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

    }

    return allContacts;