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

あなたはこれを持っています:

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 がすでにある場合は、それを行う必要はありません。私の基本的なテストでは、結果ではなく「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 に答える