当我打开rich:popupPanel时,JSF组件ViewState正在丢失

时间:2013-05-20 16:17:10

标签: jsf viewstate

我有一个内容丰富的popupPanel:

<rich:popupPanel id = "popupId">
    <h:panelGrid>
        <h:form id="formId">
           <h:panelGrid>
                // content, e.g. radiobuttons, dropdowns, panelGroups and other jsf and   richfaces components , nested components
           </h:panelGrid>
        </h:form>
    </h:panelGrid>
</rich:popupPanel>

打开并重新呈现表单和弹出窗口的链接:

<a4j:commandLink actionListener="myListener();" render="popupId formId">

我尝试了render属性的多个值,例如popupIdformId

当我点击链接时,弹出窗口正在打开,但表单中没有javax.faces.ViewState隐藏的输入字段。当我尝试选择一些无线电或更改下拉值(或任何其他操作)时,第一次提交不执行任何操作,因为javax.faces.ViewState丢失了。之后,它重新出现在表单中,第二次提交并且正常工作。

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:1)

解决方案非常简单。不要使用<h:form>的ajax-render组件。 将所有组件放在里面并渲染这些组件!

<rich:popupPanel id="popupId">
    <h:form id="formId">
        <h:panelGrid id="panelGridId">
            // content
        </h:panelGrid>
    </h:form>  
</rich:popupPanel>

不是popupId,不是formId !!!!!!!

<a4j:commandLink actionListener="someListener()" render="panelGridId" />

然后我们不会丢失javax.faces.ViewState ID,一切都会正常工作!