0

敬礼:)、私は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

dataTable が必要なときはいつでもデータベースから取得しているようです。そのため、 event.getObject() は常に古い値を返します。したがって、データテーブルのゲッターに次を追加する必要があります。

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 に答える
1

現在、オブジェクト内の値を編集しています。データベースの値を更新するには、データベースにコールバックする必要があるようです。

于 2012-10-04T22:25:18.937 に答える