java - JSF2.2 : Get result of action (no reload)

标签 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>

(模型是backBean)

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

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

最佳答案

可以使用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

关于java - JSF2.2 : Get result of action (no reload),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21282973/

相关文章:

java - ORA-22920 : row containing the LOB value is not locked with JSF

javascript - 将 jQuery 错误处理添加到 JSF 页面上列表、网格内的所有图像

Java - 更改 FileReader 的文件路径

java - 如何安排任务以定期间隔运行?

java - 我如何将一串 jsonObjects 拆分成一个数组

带有 Primefaces 和 dataTable 的 javax.el.PropertyNotFoundException

java - Android 图案锁定 API

css - 基于内容长度的动态数据表列宽

jsf - 一个输入的多个验证器

java - JSF 自定义 validator : h:message is not being rendered