0

PrimeFaces データテーブルの行エディターを使用しようとしていますが、マネージド Bean がデータテーブルの値を変更しても新しい値が認識されず、古い値が残るという問題があります。

RowEditing のショーケースをほぼ「複製」しましたが、驚くべきことにうまくいきません。より多くの投稿を検索したところ、バグである可能性があると言う人もいますが、ショーケースの例を正確に複製したところ、機能しました。私のバージョンは PrimeFaces 5.0 です。

*.xhtml

<h:form id="frmExclos">
   <p:growl id="mensajeGeneral3" sticky="false" showDetail="true"/>
   <p:panel id="pnlCriteriExclusio" style="width: 425px" header="Criteris d'exclusió del pacient" widgetVar="pnlCriterisE">
   <p:dataTable id="tblCriterisExclusioNia" var="itemCriterisExclusio" value="#{mbRCriteriExclusio.getCriterisExclusioNia(mbVMalignitatNia.personaAmbMalignitatNia.id)}" editable="true">
     <p:ajax event="rowEdit" listener="#{mbRCriteriExclusio.onRowEdit}" update=":frmExclos:mensajeGeneral3" />
     <p:ajax event="rowEditCancel" listener="#{mbRCriteriExclusio.onRowCancel}" update=":frmExclos:mensajeGeneral3"  />
             <p:column headerText="Observacions">
               <p:cellEditor>
                  <f:facet name="output"><h:outputText value="#{itemCriterisExclusio.comentaris}"></h:outputText></f:facet>
                  <f:facet name="input"><p:inputText value="#{itemCriterisExclusio.comentaris}" label="Observacions"></p:inputText></f:facet>
               </p:cellEditor>
             </p:column>
             <p:column style="width:32px">
               <p:rowEditor />
             </p:column>
             <f:facet name="footer" ><p:commandButton update="@this" icon="ui-icon-plusthick" value="Afegir criteri" oncomplete="PF('dlgAddCriterisExclusio').show()"/>
              </f:facet>
       </p:dataTable>
       </p:panel>
</h:form> 

次に、マネージド Bean MbRCriteriExclusio.java のフラグメント:

@Named(value = "mbRCriteriExclusio")
@ViewScoped
public class MbRCriteriExclusio {
public void onRowCancel(RowEditEvent event) {
    FacesMessage msg = new FacesMessage("Edit Cancelled", "" + ((MalignitatPersonaCriterisExclusioNia) event.getObject()).getComentaris());
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

メッセージの getCommentaris は、編集した新しい値ではなく、データ テーブルにロードされた初期値を返します。ショーケースのコードは同じです..

ご助力ありがとうございます

4

3 に答える 3

0

rowCancel の場合、変更をキャンセルしているため、新しい値は反映されません。この関数 public void onRowEdit(RowEditEvent event) では、変更された値を取得できます。これを試して。

于 2014-11-13T09:20:38.670 に答える
0

RowEditEvent でも同じことが起こります。

メッセージが長すぎないように関数を記述しませんでした

メッセージには、RowEditEvent で更新された値ではなく、初期値が表示されます。

于 2014-11-13T09:42:53.913 に答える
0

意図した方法が次のようなものであると仮定します。

public void onRowEdit(RowEditEvent event) {
    Object o = event.getObject();
    persist(o);
}

修正の功績は次のとおりです: http://jwsn.blogspot.com/2013/05/issue-with-rowedit-event-in-primefaces.html

データテーブル データ モデルがデータベースへのクエリを使用するゲッターによってサポートされている場合は、データベース呼び出しに null チェックを配置して、null の場合にのみ値を更新する必要がある場合があります。これは、event.getObject() の「新しい」値を「古い」値に上書きしていました。

ゲッターは次のようになります。

listOfX List<X>;

public List<X> getCriterisExclusioNia(idType id) {
    listOfX = getFacade().getListofX(id);
    return listOfX;
}

次のようにします。

public List<X> getCriterisExclusioNia(idType id) {
    if(listOfX == null) {
        listOfX = getFacade().getListofX(id);
    }
    return listOfX;
}
于 2014-12-05T17:20:34.907 に答える