【问题标题】:JSF2.2: Get result of action (no reload)JSF2.2:获取操作结果(不重新加载)
【发布时间】:2014-01-22 12:28:10
【问题描述】:

首先,我是 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>

(模型是backBean)

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

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

【问题讨论】:

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


    【解决方案1】:

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

    <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

    【讨论】:

    • Primefaces 的例子很好。因此,如果服务器需要一些时间来工作,很容易锁定页面。
    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多