我有一个selectOneMenu的对话框。 用户选择决定,根据决定按“确定”和对话框内容更改(呈现content1.xhtml或content2.xhtml)。
问题是初始组合非常小,而content1.xhtml包含一个宽表。 当用户选择“decision1”并按“ok”时,对话框将延伸到屏幕的右边界。 它不再居中,用户无法移动它(当他尝试时,它会拉伸而不是移动)。
<p:dialog id="mainDialogId" widgetVar="mainDialog" modal="true" appendToBody="true" >
<p:messages autoUpdate="true" />
<h:form id="mainForm">
<p:panel rendered="#{bean.mode eq 'mode0'}">
<p:selectOneMenu id="mainCombo" value="#{bean.decision}" style="width: 100%;">
<f:selectItem itemLabel="" itemValue="" noSelectionOption="true" />
<f:selectItem id="decision1" itemValue="decision1" itemLabel="decision1" />
<f:selectItem id="decision2" itemValue="decision2" itemLabel="decision2" />
</p:selectOneMenu>
<h:panelGroup style="display:block; text-align:right">
<p:commandButton id="ok" value="ok"
actionListener="#{bean.handleDecision()}"
update=":#{p:component('mainForm')}, :#{p:component('form1')}, :#{p:component('form2')}" >
</p:commandButton>
<p:commandButton id="cancel" value="cancel" oncomplete="mainDialog.hide();" immediate="true" />
</h:panelGroup>
</p:panel>
</h:form>
<h:form id="form1" >
<p:panel id="panel1" rendered="#{bean.mode eq 'mode1'}" >
<ui:include src="/WEB-INF/contents/content1.xhtml" />
</p:panel>
</h:form>
<h:form id="form2">
<p:panel id="panel2" rendered="#{bean.mode eq 'mode2'}" >
<ui:include src="/WEB-INF/contents/content2.xhtml" />
</p:panel>
</h:form>
</p:dialog>
这是一个显示对话框的按钮:
<p:commandButton value="Go" action="#{bean.prepare()}" update=":#{p:component('mainDialogId')}" oncomplete="mainDialog.show()" />
当我改变时:
update=":#{p:component('mainForm')}, :#{p:component('form1')}, :#{p:component('form2')}"
为:
update=":#{p:component('mainDialogId')}"
按'确定'后对话框消失。
设置固定的对话框宽度(宽度=“600”)会有所帮助,但它不是解决方案(在两种情况下看起来都很糟糕)。 我希望对话框在调整大小后重新定位。
请帮忙。
Primefaces 3.5
答案 0 :(得分:1)
当我改为:
update=":#{p:component('mainDialogId')}"
这是正确的解决方案。坚持下去。您需要更新<p:dialog>
本身以使其适合。
按“确定”后对话框消失。
如果按下“确定”按钮,则通过签入对话框的visible
属性来防止发生这种情况:
<p:dialog ... visible="#{not empty param[ok.clientId]}">
...
<p:commandButton binding="#{ok}" ... />
...
</p:dialog>