2011-09-13 8 views
16

I次のような状況があります。PrimefacesのonclickとONSUCCESS違い

ボタンをクリックした後、いくつかのビジネス・ロジックが実行されますが、それが行われた後、レポートを使用して新しいタブが表示されるはずです。

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.businesslogic}" 
       onstart="ajaxDialog.show();" 
       oncomplete="ajaxDialog.hide();" 
       onsuccess="window.open('./report.jsp', '_newtab');" /> 

これは、ビジネスロジックは一部だけミリ秒、以下の作品続く場合:(

を動作しません。また、

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.fastbusinesslogic}" 
       onclick="window.open('./report.jsp', '_newtab');" /> 

をonclickのは、新しいタブを開きますONSTARTのようなものを、それなぜなら、何秒間続くビジネスロジックの解決策があるのでしょうか?

+0

は、あなたの質問が混乱する前に、あなたが何かを行うことができますONSUCCESSと...あなたが何を意味続く「ビジネスロジック数秒 "?サーバー側のactionListener 'businessLogic'が完了した後、' window.open( './ report.jsp'、 '_newtab'); 'を呼び出すと言っていますか? –

答えて

7

私はPrimeFacesコマンドのbuttoについてonsuccessが気付きましたnは機能しません。しかし、私の場合は、ビジネスロジックにエラーがあっても、成功ダイアログが表示されるなど、エラーがあっても、オンコンプリートは必要です。 onsuccessを使用しようとしましたが動作しません。あなたは以下のようにonCompleteの試みることができる :AJAX要求をしても作成される前に、サーバーがAjaxの要求に応答した後、onCompleteのとONSUCCESSが実行されている間

<p:commandButton value="this button" update="growlMain" 
       actionListener="#{myBean.businesslogic}" 
       onstart="ajaxDialog.show();" 
       oncomplete="ajaxDialog.hide(); window.open('./report.jsp', '_newtab');"/> 
32

onclickのは(純粋なクライアント側)と呼ばれています。たとえば、ダイアログを表示する前にビジネスロジックを実行する必要がある場合、たとえば、oncompleteを使いたいとします。それは私がいつも使うものです。

また、検証エラーがない場合にのみ実行するように、JavaScriptをoncomplete内で条件設定することもできます。直感的には、onsuccessはそのように動作し、検証エラーがない場合にのみ実行すると思いますが、それはどのようになっているのでしょうか。私は本当にそれらの違いを知らない。私は裏づけの豆に成功=偽をフラグする方法があると仮定しますが、私は実際にそれを文書で見つけることができませんでした。

あなたのonCompleteの属性で検証をチェックしたい場合は、これはあなたがしたい方法です:フィールドが適切に検証されている場合は、この場合には

oncomplete="if (!args.validationFailed){someDialog.hide()}" 

、あなただけのダイアログを閉じます。バッキングBeanのパラメータを実際に注入し、リクエストが提供された後にJavaScriptでそれらを使用することができます。

RequestContext.getCurrentInstance().addCallbackParam("showDialog", false); 

そして、あなたはあなたの不完全な属性では、このようにパラメータにアクセスすることができます:あなたはこのような何かを行うことができ、あなたのバッキングBeanでとにかく

oncomplete="if (args &amp;&amp; args.showDialog){someDialog.show()}else{ alert('the bean didnt let me open the dialog')}" 

、私は役立ちます願っています。

+4

私はthaと記号をエスケープする必要がありました:\t oncomplete = "if(args & & args.showDialog){dialog1。show()} else {alert( '豆はダイアログを開けませんでした}}} – 8bitjunkie

関連する問題