JSF- редактор строк Primefaces 5.0 не распознает новое значение

Я пытаюсь использовать редактор строк данных PrimeFaces, и у меня проблема в том, что при изменении значения в таблице данных управляемый компонент не распознает новое значение, а старое остается.

Я почти "клонировал" витрину 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> 

Затем фрагмент управляемого компонента 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);
}

В Msg getComentaris возвращает начальное значение, загруженное в таблицу данных, а не новое значение, которое я редактировал! Код витрины такой же..

Большое спасибо за Вашу помощь

3 ответа

В RowEditEvent происходит то же самое.

Я не написал функцию, чтобы не слишком долго сообщение

Сообщение показывает мне начальное значение, а не обновленное в RowEditEvent.

В случае rowCancel,оно не будет отражать новое значение, так как вы отменяете изменения. в этой функции public void onRowEdit(событие RowEditEvent) вы сможете получить измененное значение. Попробуй это.

Предполагая, что предполагаемый метод похож на:

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

Кредит на исправление идет по адресу: http://jwsn.blogspot.com/2013/05/issue-with-rowedit-event-in-primefaces.html

Если ваша модель данных с поддержкой данных поддерживается получателем с запросом к базе данных, вам может потребоваться поставить нулевую проверку вокруг вызова базы данных, чтобы она обновляла значения только при нулевом значении. Это переписывало мое "новое" значение в 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;
}
Другие вопросы по тегам