0

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);
}

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

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

4

3 回答 3

1

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

于 2012-10-04T22:25:18.937 回答
1

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

我希望这可以帮助你。

于 2014-03-09T17:52:01.610 回答
0

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

@Named (value="YourBeanName")

@ManagedBean (name="YourBeanName")

于 2013-07-04T14:01:55.510 回答