2016-04-16 10 views
3

私は現在、ダイアログを開く前にJavascriptでダイアログを開き、その要素を更新しようとしています。すぐに閉じることなくダイアログを更新しますか?

トリガーはプライムフェイスプッシュから来ているので、私はJavaScriptを介してそのすべてを処理しようとしています。

基本的流れはこのようなものです:私のダイアログがvotingDialogWindowと呼ばれていること

function onStart(data) 
{             
    votingDialogRefresh(); 
    PF('votingDialogWindow').show(); 
} 

注:

<p:socket onMessage="onStart" channel="/votingStartChannel" /> 

ソケットはJavaScriptを以下のトリガ。

他の機能、votingDialogRefresh();には、次のトリガされます。

<h:form> 
    <p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" /> 
</h:form> 

それが表示されます前にダイアログを更新する「必要があります」。

しかし、フローを開始するとすぐに、ダイアログが開いてすぐに閉じます。私はそれを3秒間見たい。また、この小さな時間帯で見る限り、すべてのフィールドがまだ期待値で満たされていないため、更新はありませんでした。

私はここで間違っていますか?

答えて

4

<p:remoteCommand>が非同期(ajax)リクエストを「実行して忘れる」ため、技術的な問題が発生します。基本的に、ajaxリクエストが送信された後、votingDialogRefresh()関数呼び出しはすぐに戻り、PF('votingDialogWindow').show()に進み、ダイアログを表示します。しかし、後で<p:remoteCommand>というAjaxレスポンスが返ってくると、ダイアログ全体が更新されます。どうやら、ダイアログのデフォルト状態は「閉じている」ようです。だから視覚的にすぐに閉鎖されます。デフォルトの状態は、visible属性で制御可能です。 visible="#{facesContext.postback}"を使用していた場合、開いていたように見えますが、これはエンドユーザが開く直後にダイアログのコンテンツが更新/変更されるのを見るため、ユーザーの利便性が悪いだけです。

ajaxリクエストが完了し、ダイアログが更新され、ajaxリクエストを起動する前でも、ダイアログの更新前にも、ダイアログを開く必要があります。これを達成するには、oncompleteの電話を<p:remoteCommand>に移動するだけです。

function onStart(data) { 
    votingDialogRefresh(); 
} 

<h:form> 
    <p:remoteCommand name="votingDialogRefresh" update="votingDialogWindow" 
     oncomplete="PF('votingDialogWindow').show()" /> 
</h:form> 
関連する問題