Primefaces Datatable submits wrong data by Celledit

179 Views Asked by At

I'm using Primefaces datatable with PF8.

Data is coming from ListDatamodel. I want to use Cell editing and implemented it exactly like shown in Primefaces showcase. After 3 or 4 inputs of new values, in the approriate bean the value gets updated, but with the old value. After a refresh of the page, the behaviour is normal again.

Here is the xhtml:

<p:dataTable  style= "transform: scale(1); transform-origin: 0 0;" id="costingOverviewData" value="#{costingOverviewBean.model}" var="item" 
        editable="true" editMode="cell"  selectionMode="single" disabledSelection="true"
        rowStyleClass="#{(item.konto % 1000) eq 999 ? 'total':null}"
        rowKey="#{item.ID}"
        
        >

        
        <p:ajax event="cellEdit" listener="#{costingOverviewBean.onCellEdit}" process="@this" />
        
        <p:column rendered = "#{costingOverviewBean.showVorkalk ne false}" style="min-width: 20px;width:20px; max-width: 20px;">
            <h:outputText value="#{item.konto}" />  
        </p:column>  
        <p:column style="min-width: 200px;width:200px; max-width: 200px;" >  
            <h:outputText value="#{item.beschreibung}" />  
        </p:column>  
        <p:column rendered = "#{costingOverviewBean.showVorkalk eq true}" width="75" headerText="#{res['COV_VorkalkQuantity']}" style="text-align:right">
             
        <p:cellEditor>
            <f:facet name="output">
                <p:outputPanel   style="#{item.menge_Vorkalk ne null ? 'border-style:solid;border-color:grey;border-width:0.5pt':'border-style:none'}">
                    <p:outputLabel   value="#{item.menge_Vorkalk}">
                    <f:convertNumber integerOnly="true"></f:convertNumber>
                    </p:outputLabel>
                </p:outputPanel>
            </f:facet>
            <f:facet name="input">
                <p:inputNumber rendered="#{item.menge_Vorkalk ne null ? 'true':'false'}" id="menge_Vorkalk_Input" value="#{item.menge_Vorkalk}" style="width:96%">
             </p:inputNumber>
            </f:facet>
        </p:cellEditor>

...

And here the bean:

public DataModel <KontenrahmenIstkosten> getModel() throws IOException {
    if(model == null){
            load_Strukturplan();
        }
    if (model == null){
         model = new ListDataModel<KontenrahmenIstkosten>(list);
            converter = new NumberConverter();
    }
        return this.model;
    }
...
public void onCellEdit(CellEditEvent event) throws IOException {
         System.out.println(event.getNewValue());
        System.out.println(event.getRowKey());
        
        
            
            init();
            //PrimeFaces.current().ajax().update("form:pnlOfferEdit");
    }
    }

In extreme cases, I got also wrong data in fields which I never touched, and the whole table is messed up.

I'm struggling for 3 days now. Any help is appreciated!!

Edit: during value editing, getmodel() is called several times before calling of onCellEdit().

Is this normal behaviour? From my feeling, I face here a timing issue: Sometimes it is luckily working, sometimes not.

1

There are 1 best solutions below

6
Ralf On

Did you try it without the process="@this"? This only submits the values from the component.

<p:ajax event="cellEdit" listener="#{costingOverviewBean.onCellEdit}"/>

Or you can try adding the id instead of @this

<p:ajax event="cellEdit" listener="#{costingOverviewBean.onCellEdit}" process="costingOverviewData"/>