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 は、編集した新しい値ではなく、データ テーブルにロードされた初期値を返します。ショーケースのコードは同じです..
ご助力ありがとうございます