如何有条件地调用a4j:commandButton oncomplete脚本取决于操作结果

时间:2011-04-01 08:40:27

标签: jsf richfaces ajax4jsf

我有一个

<a4j:commandButton action="#{myBean.doCalculation}"
                   oncomplete="redirectBrowser()" />

但是,如果myBean.doCalculation()出现错误,则始终会调用oncomplete属性。我如何让它取决于行动结果的方法?

3 个答案:

答案 0 :(得分:4)

您可以检查oncomplete事件中的错误,并在找不到任何事件时重定向。它可以这样做

oncomplete="#{facesContext.maximumSeverity == null ? 'redirectBrowser()' : 'doSomethingElse()'}"

答案 1 :(得分:3)

如果您使用的是JSF 2.0,则可以使用FacesContext#isValidationFalied()检查验证是否失败:

oncomplete="if (#{not facesContext.validationFailed}) redirectBrowser()"

但是,只需在action方法中执行重定向就更干净了:

public String doCalculation() {
    // ...

    if (success) {
        return "nextPage.xhtml?faces-redirect=true";
    } else {
        return null;
    }
}

更简洁的是,只需通过Validator进行验证即可。这样,当验证失败时,根本不会调用action方法。

答案 2 :(得分:2)

好吧,只是查找facesContext.maximumSeverity == null是不够的,可能会有一个警告作为当前最大严重性,也应重定向。相反,编写一个方法,查看是否存在任何最大严重性错误严重性......