无法通过PrimeFaces从cellEdit事件获取新的dataTable值

时间:2015-07-13 20:47:23

标签: jsf jsf-2 primefaces datatable

我一直在试图在整个早上想出这个问题而无法让它发挥作用。基本上,我无法通过PrimeFaces从cellEdit事件中获取新的dataTable值。

这是我的XHTML页面:

int set_bit = n ^ (n&(n-1));

这是我的听众方法:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
            xmlns:ui="http://java.sun.com/jsf/facelets" 
            xmlns:p="http://primefaces.org/ui"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core">

<h:form id="httpPolicyForm">
    <p:dataTable id="httpTable" var="row" value="#{httpPolicyBean.rows}" editable="true" editMode="cell">
        <f:facet name="header">
            HTTP Policy
        </f:facet>
        <p:ajax event="cellEdit" listener="#{httpPolicyBean.onCellEdit}" update=":httpPolicyForm:httpTable" />
        <p:column headerText="Property">
            <h:outputText value="#{row.name}" />
        </p:column>
        <p:column headerText="Value">
            <p:cellEditor>
               <f:facet name="output"><h:outputText value="#{row.value}" /></f:facet>
               <f:facet name="input"><p:inputText value="#{row.value}" style="width:100%"/></f:facet>
           </p:cellEditor>
        </p:column>
    </p:dataTable> 
</h:form>

调用该方法,但newValue的值始终是旧值。此外,表永远不会使用新值更新。但是,如果我再次单击该单元格再次编辑该值,则会提取新值。我不确定我做错了什么。请帮我解决这个问题。

bean是SessionScoped。

1 个答案:

答案 0 :(得分:0)

我可以通过执行以下步骤来实现此目的:

将事件侦听器onCellEdit()函数从HttpPolicyBean类移动到名为PolicyViewBean的新类,并使该bean成为ViewScoped。

我注意到PF演示中的示例。

BTW,我现在试图弄清楚为什么HttPolicyBean中的getRows()在其范围是SessionScoped时被多次调用。根据我对SessionScoped的理解,它只应在首次创建会话且列表为空时调用一次。