【发布时间】:2015-03-16 14:22:46
【问题描述】:
我有一个覆盖面板,用于选择输入文本的值。 如果覆盖面板附加到正文,它会正确显示并覆盖对话框。但在这种情况下,覆盖面板内的 ajax 监听器只会触发一次。第二次(以及所有其他时间)不从侦听器执行后备 bean 方法。 当我将 appendToBody 更改为 false 时,覆盖面板内的 ajax 侦听器每次都会触发,但覆盖面板不会显示在对话框的边框上。有解决方案吗?尝试使用 z-index 没有成功。
编辑: 使用以下覆盖面板代码,它可以工作:
<!-- if overlay is appended to body, it works only once -->
<p:overlayPanel widgetVar="#{widgetVar}" appendToBody="false" styleClass="clSelectionPanel" dynamic="true">
<p:tree value="#{clContentController.getClRoot()}" var="element"
selectionMode="single" draggable="false" droppable="false" dynamic="true">
<p:ajax event="select" onstart="PF('#{widgetVar}').hide();" oncomplete="hitlistTableResized();"
listener="#{clContentController.ok(element)}" immediate="true" update="@(.#{updateClass})" />
<p:treeNode ...
</p:tree>
</p:overlayPanel>
在输入文本时使用按钮添加值和清除值:
<p:inputText value="#{curProperty.value}" readonly="true"
required="#{curExtendedEntryField.required}" styleClass="editMaskChoiceInput">
</p:inputText>
<p:commandButton immediate="true"
actionListener="#{clController.setSelectedObject(curProperty)}"
oncomplete="PF('clSelectionPanelEditVar').loadContents('#{component.clientId}');"
title="Add Value" process="@this" />
<p:commandButton immediate="true"
actionListener="#{editPropertyBL.clearCSelection(curProperty)}"
title="Clear Value" update="@(.editMaskChoiceInput)" />
在我的例子中,诀窍是包含覆盖面板。我之前在输入文本字段迭代中已经这样做了,但现在我在表单下定义它:
<h:form id="editPropertyFormId">
<ui:include src="/sections/dialog/editPropertyDialog.xhtml" />
<ui:include src="/sections/dialog/clSelectOverlay.xhtml">
<ui:param name="widgetVar" value="clSelectionPanelEditVar" />
<ui:param name="updateClass" value="editMaskChoiceInput" />
</ui:include>
问候 奥利弗
【问题讨论】:
-
请附上一些代码。
-
我在回答中发布代码
-
现在可以使用了。我将覆盖面板的 ui:include 移动为表单的最后一个子项。覆盖面板显示正确且有效。
标签: jsf primefaces