JSF2.2:获取操作结果(无重新加载)

时间:2014-01-22 12:28:10

标签: java jsf jsf-2 action jsf-2.2

首先,我是JSF的新手。是否有可能在xhtml页面上获得操作的结果?

所以,让我通过一个小例子解释一下:情况是下面的对话框已经全部开启了。

<p:dialog widgetVar="dialog" modal=true>
  <h:outputLabel for="inTxt" value="Seats:" />
  <h:inputText id="inTxt" value="#{model.seats}" />
  <p:commandButton value="Save" 
     action="#{model.saveAction()}"
     oncomplete="PF('dialog').hide();"/>
</p:dialog>

(model是backBean)

public Class Model {
  private int seats;
  ...
  public String saveAction() {
    if(seats == 10) {
      return "success"
    } else {
      return "failure"
    }        
  }
  // Getter & Setter
}

如果saveAction()返回“失败”,则不应关闭对话框。这一切都应该在不重新加载页面的情况下发生这可能吗?

1 个答案:

答案 0 :(得分:1)

可以使用ajax。首先,该方法应该是void,而commandButton的属性应该是actionListener而不是action。这是commandButton的代码:

<p:commandButton value="Save" 
     actionListener="#{model.saveAction}" />

如果成功,您必须以编程方式重定向。您可以使用以下代码:

FacesContext context = FaccesContext.getCurrentInstance();
context.getApplication().getNavigationHandler().handleNavigation(context, null, "/success?faces-redirect=true");

如果失败,请使用此代码关闭托管bean的对话框:

RequestContext.getCurrentInstance().execute("dialog.hide()");

在primefaces展示中,有一个类似的演示。不是从托管bean关闭对话框,而是将参数发送回页面并以javascript方法关闭对话框。这是link