无法通过PrimeFaces从cellledit事件获取新的数据表值



我整个上午都在绞尽脑汁想办法解决这个问题,但就是不行。基本上,我不能通过PrimeFaces从cellledit事件获得新的dataTable值。

这是我的XHTML页面:

<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>

这是我的even listener方法:
public void onCellEdit(CellEditEvent event) {
        Object oldValue = event.getOldValue();
        Object newValue = event.getNewValue();
        printRowValues();
        if(newValue != null && !newValue.equals(oldValue)) {
            logger.debug("Old: " + oldValue + ", New:" + newValue);
            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Cell Changed", "Old: " + oldValue + ", New:" + newValue);
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
}

方法被调用,但newValue的值始终是旧值。此外,表永远不会用新值更新。但是,如果我再次单击单元格以再次编辑该值,则会拉出新值。我不确定我做错了什么。请帮我想一下。

bean是SessionScoped的

我能够通过执行以下步骤使其工作:

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

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

顺便说一句,我现在正试图弄清楚为什么在HttPolicyBean的getRows()被调用多次,当它的范围是SessionScoped。根据我对SessionScoped的理解,它应该只在会话第一次创建并且列表为空时调用一次。

相关内容

  • 没有找到相关文章

最新更新