oncomplete方法并不总是在动作之后执行,JSF

时间:2012-07-05 17:10:12

标签: javascript jsf richfaces

我有下一个场景(简化):

我在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函数中取消注释警报,它就可以工作。 我认为警报提供了“必要的”时间来保存高级以完成自己。

我可以做些什么才能确保在完成操作后,不完整的方法有效?

或者我在其他地方犯了错误?

非常感谢

[编辑]

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

1 个答案:

答案 0 :(得分:1)

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

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

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