我正在尝试使用 Primefaces 4 对话框框架打开对话框,
public void openDialog(String viewName) {
RequestContext.getCurrentInstance().openDialog(viewName);
}
这有效:
<p:commandButton value="Click" action="#{impaktDialogBean.openDialog('/popup/test2')}"/>
这不会:
<p:commandButton value="Click">
<p:ajax event="click" listener="#{impaktDialogBean.openDialog('/popup/test2')}" ></p:ajax>
</p:commandButton>
所以,Primefaces 对话框框架只适用于 action 和 actionListener????
我正在使用:
谢谢。
最佳答案
你有这个:
public void openDialog(String someView) {
RequestContext.getCurrentInstance().openDialog(someView);
}
所以当你这样做时:
<h:form id="form">
<p:commandButton id="button" value="Click" actionListener="#{bean.openDialog('someView')}" />
</h:form>
您在 Ajax 响应中收到此信息:
PrimeFaces.openDialog({
url:'/some/address/view.xhtml',
pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64',
sourceComponentId:'form:button',
sourceWidget:PF('widget_form_button'),
options:{}});
所以,你可以试试这个:
<h:form id="form">
<p:commandButton id="button" value="Click" onclick="PrimeFaces.openDialog({
url:'/some/address/view.xhtml',
pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64',
sourceComponentId:'form:button',
sourceWidget:PF('widget_form_button'),
options:{}});" />
</h:form>
您甚至可以使用返回值:
<h:form id="form">
<p:growl id="growl" showDetail="true" />
<p:commandButton id="button" value="Click" onclick="PrimeFaces.openDialog({
url:'/some/address/view.xhtml',
pfdlgcid:'cf8e7955-a6cf-4dd8-9a07-55cd29696a64',
sourceComponentId:'form:button',
sourceWidget:PF('widget_form_button'),
options:{}});">
<p:ajax event="dialogReturn" listener="#{bean.returnedValue}" update="growl" />
</p:commandButton>
</h:form>
AJAX 只是将结果转换为目标 url。如果您已经拥有目标网址,则无需执行此操作。在我的基本测试中,这很有效,与原始测试完全一样,只是您必须在 'url' 字段中传递目标地址,而不是结果。
希望这可以帮助。
关于ajax - 使用 ajax 监听器时 Primefaces 对话框框架不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22679006/