JSF commandbutton ajax:如何捕获成功/失败事件

时间:2013-02-11 09:59:40

标签: ajax redirect jsf-2

我目前的代码。

<h:form>
   <h:panelGroup id="messagePanel" layout="block">
       <h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
   </h:panelGroup>
    <h:panelGrid columns="2">

        // some form input stuff here..

    </h:panelGrid>         

   <h:commandButton class="register-btn" action="#{accountController.create}" value="#{bundle.Register}">
        <f:ajax event="action" execute="@form" render="messagePanel"/>
   </h:commandButton>                       
</h:form>

messagePanel是验证错误显示的位置。

我想知道如何捕获成功事件。

[done]如果用户输入了一些不正确的值,它会进行ajax验证并显示不正确的值

[问题]如果成功,它应该重定向到另一个页面。

**更新

创建方法

public String create() {
        try {

            getFacadeUser().create(currentUser);

            JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("AccountCreated"));
            return prepareCreate();
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
            return null;
        }
    }

public String prepareCreate() {
    current = new Account();
    selectedItemIndex = -1;
    return "index";
}

我正在使用JSF 2.1

1 个答案:

答案 0 :(得分:0)

这是使用AJAX请求进行重定向的正确方法。您应该使用ExternalContext.redirect()代替:

FacesContext.getCurrentInstance().getExternalContext().redirect("yourUrl");

通过这种方式,您将收到服务器的部分响应,它将进行重定向:

<partial-response>
  <redirect url="yourUrl">
  </redirect>
</partial-response>

您在此方法中返回的字符串无关紧要,您甚至可以返回null