我有一个内容丰富的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
属性的多个值,例如popupId
或formId
。
当我点击链接时,弹出窗口正在打开,但表单中没有javax.faces.ViewState
隐藏的输入字段。当我尝试选择一些无线电或更改下拉值(或任何其他操作)时,第一次提交不执行任何操作,因为javax.faces.ViewState
丢失了。之后,它重新出现在表单中,第二次提交并且正常工作。
这是如何引起的?如何解决?
答案 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,一切都会正常工作!