6

我正在尝试使用 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????

我在用着:

  • 素面4
  • 雄猫 7
  • JSF 2.2.6 莫哈拉

谢谢。

4

3 回答 3

0

我发现的最简单的解决方案是通过 javascript 启动按钮。

打开对话框的按钮(可能隐藏):

<p:commandButton id="myButton" action="#{bean.openMyDialog}" style="display:none" />

“单击”按钮的 ajax 事件:

<p:ajax ... oncomplete=" $('#myButton').click() " />
于 2014-12-07T16:19:38.757 回答
0

你有这个:

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”字段中传递目标地址,而不是结果。

希望这可以帮助。

于 2014-12-06T18:34:50.550 回答
0

我知道这个问题是很久以前提出的,但对于未来的时间......

一个<p:remoteCommand>呢?

<p:remoteCommand name="remoteCmd" update="anything" actionListener="#{impaktDialogBean.openDialog('/popup/test2')}" />

<p:commandButton value="Click" update="anything" onclick="remoteCmd()" >

实现对 bean 的 javascript 调用的不同方法。

于 2016-06-17T11:06:25.180 回答