-1

我有一个丰富的: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属性值,例如popupIdor formId

当我单击链接时,弹出窗口正在打开,但表单中没有javax.faces.ViewState隐藏的输入字段。当我尝试选择一些收音机或更改下拉菜单(或任何其他操作)的值时,第一次提交什么也不做,因为javax.faces.ViewState缺少。之后,它重新出现在表单中,第二次提交并正常工作。

这是如何引起的,我该如何解决?

4

1 回答 1

1

解决方案非常简单。不要使用 inside 进行 ajax 渲染组件<h:form>。将所有组件放入其中并渲染这些组件!

<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.ViewStateid 并且一切都会正常工作!

于 2013-05-22T15:51:02.953 回答