使用从外部xhtml文件加载的primeface模式对话框时出现问题。
我的意图是:按下按钮应该调用方法" setType"使用参数" T" (调用此方法的原因是根据类型重用对话框)。在此方法期间,dialog.xhtml中的DualList将使用正确的和依赖于类型的数据重新加载。之后,应显示对话框。
我目前的代码是:
<p:commandButton
value="#{bean.value}"
id="button" type="button" icon="ui-icon-newwin"
onclick="varDialog.show()" style="width: 70px;">
<p:ajax listener="#{bean.setType('T'.charAt(0))}"
update="dialog" />
<p:dialog id="dialog"
widgetVar="varDialog"
header="Dialog Header"
resizable="false" modal="true" dynamic="true" width="900"
appendToBody="true">
<ui:include src="dialog.xhtml" />
</p:dialog>
</p:commandButton>
问题是对话框会在显示后立即消失(我的猜测是因为&#39; update =&#34;对话框&#34;&#39;)。但是,省略此代码将在没有可见数据的对话框中结束。
所以我的问题是:如何根据数据加载具有特定类型的通用外部对话框?
答案 0 :(得分:0)
为什么在这种情况下使用AJAX?我会设置一个动作:
<p:commandButton
value="#{bean.value}"
id="button"
type="button"
icon="ui-icon-newwin"
style="width: 70px;"
action="#{bean.prepareDialog}">
在bean里面:
public void prepareDialog() {
// Do your things.
RequestContext context = RequestContext.getCurrentInstance();
context.execute("dialogWidget.show()");
}
PF中存在一个错误,它要求您在条件的一部分条件中包含动态对话,否则它只会加载并忽略动态。这可能适用于您的方案,但我只是看到您的示例代码后无法对其进行评估。
<c:if test="#{bean.condition != null}">
<ui:include src="dialog.xhtml"/>
</c:if>
答案 1 :(得分:0)
我自己在阅读这个帖子时找到了答案:http://forum.primefaces.org/viewtopic.php?f=3&t=18503
我犯的第一个错误是嵌套的(一个在main.xhtml中,一个在包含的dialog.xhtml中)。所以 - 在线程的帮助下 - 我将代码更改为以下内容:
<h:form>
<p:commandButton
value="#{bean.value}"
id="supplierButton" icon="ui-icon-newwin"
actionListener="#{bean.prepareDialog('T'.charAt(0))}"
oncomplete="varDialog.show()"
update=":tabView:dialog"
immediate="true" style="width: 70px;">
</p:commandButton>
</h:form>
<p:dialog id="dialog"
widgetVar="varDialog"
header="Dialog title"
resizable="false" modal="true" dynamic="true" width="900"
appendToBody="true">
<ui:include src="dialog.xhtml" />
</p:dialog>
这就像一个魅力。