1

次のシナリオがあります(簡略化):

docsMBマネージドBeanの関数:

public void saveAdvance() {
    // by default, finalized is false
    finalized = getFinalizedByBySlowFunction();
}

私のxhtmlのボタン:

<a4j:commandButton value="SAVE"
action="#{docsMB.saveAdvance}"                              
oncomplete="verifyDocs();"/> 

そして私のverifyDocsは同じxhtmlで機能します:

<script type="text/javascript">
var verifyDocs = function(){
    //alert(1);
    if( #{docsMB.finalized == true} ){
        #{rich:component('mpConfirmar')}.show();
    }
}
</script>

これは私を問題にします。アプリを実行すると、「finalized」は常にfalseになりますが、verifyDocs関数でアラートのコメントを解除すると、機能することに気付きました。アラートは、saveAdvanceがそれ自体をファイナライズするための「必要な」時間を与えると思います。

アクションが完了した後にoncompleteメソッドが実行されるようにするにはどうすればよいですか?

それとも私は他の場所で間違いをしていますか?

どうもありがとう

[編集]

ページ全体を更新すると、正しい「最終的な」値が得られます...

4

1 に答える 1

1

問題は、javascript関数を定義すると、静的になりました。つまり、1回実行するだけで、ページが読み込まれるときに、finalized変数が定義された値を取得します。したがって、ボタンをクリックすると、事前定義された値が取得され、その時点では値は取得されません。しかし、ページを更新すると、変数は更新の時点で値を取得します。

したがって、これを解決するために、JavaScriptコードをoncompleteメソッドに直接配置し、最後にWORKS:D

おそらくより良い解決策は、ボタンがクリックされるたびにjavascriptコードを更新する方法を見つけることかもしれません。なぜなら、javascriptコードをoncompleteメソッドに入れると、1行にたくさんの文字があるため、ダーティに見えるからです。

于 2012-07-05T23:04:28.377 に答える