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”总是错误的,但我意识到如果我取消注释 verifyDocs 函数中的警报,它会起作用。我认为警报为 saveAdvance 提供了“必要的”时间来完成自身。

我可以做些什么来确保 oncomplete 方法在操作完成后执行?

还是我在其他地方做错了?

非常感谢

[编辑]

如果我刷新整个页面,我会得到正确的“最终”值......

4

1 回答 1

1

问题是当我定义 javascript 函数时,它变得像静态的,这意味着,它只执行一次,并且 finalized 变量在页面加载时获取定义的值。因此,当我单击按钮时,它会检索预定义的值,此时没有值。但是如果我刷新页面,变量会在刷新时获取值。

所以为了解决这个问题,我只是将我的 javascript 代码直接放在 oncomplete 方法中,最后 WORKS :D

也许更好的解决方案可能是找到一种方法来在每次单击按钮时刷新 javascript 代码,因为如果我将 javascript 代码放在 oncomplete 方法中,它看起来很脏,因为一行中有很多字符。

于 2012-07-05T23:04:28.377 回答