我有一个带有按钮的表单,可以打开Primafaces overlayPanel
。
在面板中有另一个按钮,它执行Ajax操作,然后关闭叠加层
这是一个完全没有Ajax操作的简化版本:
<h:form>
<p:commandButton id="button1" value="Open overlay" type="button"/>
<p:overlayPanel for="button1" widgetVar="ovl" dynamic="true">
<p:commandButton value="Close" oncomplete="ovl.hide();"
update="@form"/>
</p:overlayPanel>
</h:form>
请注意,该面板必须为dynamic="true"
,因为必须在实际应用中提取动态内容,并且需要update="@form"
才能更新其他表单组件。
问题是:如果我同时拥有属性dynamic="true"
和update="@form"
,那么叠加层只会在第一时间出现。单击“关闭”按钮后,如果我再次单击“打开覆盖”,则面板将不会显示。
我做错了什么?
(使用PrimeFaces 3.5和GlassFish 3.1.2.2)
答案 0 :(得分:13)
在onclick="widgetVar.loadContents()"
下方的按钮中使用overlaypanel
,其中widgetVar
是overlayPanel
的变种。
答案 1 :(得分:0)
我在下面的代码中注意到,只要您在包含Open-Overlay按钮的表单上进行更新,它就会中断。
<h:form>
<p:commandButton id="button1" value="Open overlay" type="button"/>
<p:commandButton value="break things" update="@form" />
<p:overlayPanel for="button1" dynamic="true">
<p:commandButton value="Close" update="@form" />
</p:overlayPanel>
</h:form>
如果可以将表单拆分为两个,嵌入在OverlayPanel中的按钮可以尝试调用单击用于切换叠加层的按钮。也许符合下面的内容。
<h:form>
<p:commandButton id="button1" value="Open overlay" type="button"/>
<p:overlayPanel for="button1" dynamic="true" >
<p:commandButton value="Close" update=":formToBeUpdated" onclick="document.getElementById('button1').click();"/>
</p:overlayPanel>
</h:form>
<h:form id="formToBeUpdated">
<h:inputText value="bleh"/>
</h:form>
答案 2 :(得分:0)
你应该给你的overlayPanel一个id和oncompelete你的按钮显示它。 代码如下:
<h:form>
<p:commandButton id="button1" value="Open overlay" type="button" oncomplete="PF('ovlID').show()"/>
<p:overlayPanel id="ovlID" for="button1" widgetVar="ovl" dynamic="true">
<p:commandButton value="Close" oncomplete="ovl.hide();"
update="@form"/>
</p:overlayPanel>
</h:form>