Primefaces Celleditor事件不包含新价值

时间:2014-12-15 11:19:57

标签: jsf primefaces tablecelleditor

我想使用PF 4 celleditor并坚持showcase中的示例。但我得到以下行为: 我可以编辑我的单元格,调用bean中的onCellEdit(),但该事件将包含event.getNewValue()的旧值。听了网络流量,我能够抓住这个:

javax.faces.partial.ajax=true&
javax.faces.source=pvChangeForm%3Apvc&
javax.faces.partial.execute=pvChangeForm%3Apvc&
javax.faces.partial.render=pvChangeForm%3Apvc+pvForm&
javax.faces.behavior.event=cellEdit&
javax.faces.partial.event=cellEdit&
pvChangeForm%3Apvc_encodeFeature=true&
pvChangeForm%3Apvc_cellInfo=0%2C1&
pvChangeForm%3Apvc%3A0%3Aj_idt127=pvChangeForm%3Apvc%3A0%3Aj_idt127&
pvChangeForm=pvChangeForm&pvChangeForm%3Apvc%3A0%3Aj_idt130=666&
javax.faces.ViewState=-8810553618561534598%3A1979735468348742605

其中重要的一行是倒数第二行。 666是我放入单元格的值。如果我再次编辑此单元格,也会显示它。但是离开单元格或按Enter键,它不会被保存。

我的数据表:

<h:form id="pvChangeForm">
<p:dataTable id="pvc" var="tVar" value="#{paramBean.pvForChange.values}" editable="true" editMode="cell">
    <p:ajax event="cellEdit" listener="#{paramBean.onCellEdit}" update=":pvChangeForm:pvc" />
    <p:column>
        <p:cellEditor>
            <f:facet name="output"><h:outputText value="#{tVar}" /></f:facet>
            <f:facet name="input"><p:inputText value="#{tVar}" style="width:96%" label="Wert"/></f:facet>
        </p:cellEditor>
    </p:column>
</p:dataTable>
</h:form>

paramBean.pvForChange.valuesList<String>。不知怎的,我觉得问题在于这个事实(因为我想直接在列表中编辑一个字符串)。但根据我的理解,这不应该是一个问题。

1 个答案:

答案 0 :(得分:2)

是的,问题是尝试更新未包含在POJO中的值。 Primefaces数据表用于处理POJO中包含的属性,但是说,您可以使用bean作为包装对象修复您的问题,就像这样

    <h:form id="pvChangeForm">
        <p:dataTable id="pvc" var="tVar" value="#{paramBean.pvForChange.values}"  rowIndexVar="index" editable="true" editMode="cell">
            <p:ajax event="cellEdit" listener="#{paramBean.onCellEdit}" update=":pvChangeForm:pvc" />
            <p:column>
                <p:cellEditor>
                    <f:facet name="output"><h:outputText value="#{paramBean.pvForChange.values[index]}" /></f:facet>
                    <f:facet name="input"><p:inputText value="#{paramBean.pvForChange.values[index]}" style="width:96%" label="Wert"/></f:facet>
                </p:cellEditor>
            </p:column>
        </p:dataTable>
    </h:form>