JSF 2,Primefaces:更新Incell Editing中selectOneMenu选择的单元格

时间:2011-11-16 09:38:37

标签: jsf-2 primefaces

我在p:dataTable中使用Primesfaces的Incell编辑。

在selectOneMenu中选择新的id时,我想更新同一行中的“name”字段,而不必等到用户按下要更新的name字段的ok复选标记。对象的名称属性在bean.idEdited(object)中更新。

我希望我可以使用f:ajax render =“name”更新其他字段,如下所示:

<h:form>
    <p:dataTable var="object" value="#{bean.objects}"
        <p:column>
            <p:cellEditor>
                <f:facet name="output">
                    <h:outputText value="#{bean.objectId}" />
                </f:facet>
                <f:facet name="input">
                    <h:selectOneMenu value="#{bean.objectId}">
                        <f:selectItems value="#{bean.objectIds}" />
                        <f:ajax listener="#{bean.idEdited(object)}"
                                render="name" />
                    </h:selectOneMenu>
                </f:facet>
            </p:cellEditor>
        </p:column>
        <p:column>  
            <h:outputText id="name" value="#{object.name}" /> 
        </p:column>
    </p:dataTable>    
</h:form>

当我尝试render =“name”时,我得到了这个:

SEVERE: Error Rendering View[/logicalAddress.xhtml]
java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:2867)
...

使用 Primesfaces 2.2.1 Netbeans 7.0.1 JSF捆绑了Netbeans

想法,其他方式或救赎?

编辑:p:ajax呈现相同的结果。

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为当您调用ajax呈现页面时,该页面已经呈现。

提示:如果你使用primefaces,你也可以使用primefaces组件。同时升级到Primefaces 3.0.M4以获得更好的实施。您还有一个primefaces selectOneMenu component,您可以将primefaces ajax (p:ajax event="onchange")update属性一起使用(更新整个表单)

答案 1 :(得分:0)

使用p更新整个表单:ajax肯定会更新名称字段,但在此之后该行将不再处于编辑模式。如果用户想要编辑同一行中的另一个单元格,则必须明确进入编辑模式