【问题标题】:After closing p:dialog, event="dialogReturn" is not being called关闭 p:dialog 后,未调用 event="dialogReturn"
【发布时间】:2016-04-23 14:39:38
【问题描述】:

我正在使用 PrimeFaces 5.2。场景:

  1. 打开对话框查看列表
  2. 在对话框中,最后显示操作列
  3. 关闭对话框
  4. 重定向到列中选定的操作页面。

1、2、3 正在工作。

我尝试了很多东西,但关闭后重定向不起作用。 dialogReturn 方法在我调用重定向代码的地方没有被调用。

这里我在 MyFile.xhtml 中成功加载了一个对话框。

<p:commandLink action="#{userDashboardBacking.showPriorityMyView()}"
                  class="myClass"
                  value="#{userDashboardBacking.priorityFilesLabel1} (#{userDashboardBacking.priorityFilesCount1})">
                  <p:ajax event="dialogReturn" update="@form" listener="#{userDashboardBacking.dialogReturn()}" />
    </p:commandLink>

MyFileBacking.java

// this always get me to the required dialog/page
public void showPriorityMyView(){
    Map<String, Object> options = new HashMap<String, Object>();
    options.put("modal", true);
    options.put("closable", true);
    options.put("draggable", true);
    options.put("resizable", true);

    options.put("contentHeight", "500");
    options.put("contentWidth", "1100");

    RequestContext.getCurrentInstance().openDialog("priorityMyView", options, null);
}

// this method is never called.
public void dialogReturn(){
    FacesContext facesContext = FacesContext.getCurrentInstance();
    String  outcome = "/myDetails.jsf?faces-redirect=true"; 
    facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null,outcome );
}

MyDetailDlg.xhtml

<p:column width="10">
    <h:commandLink update="@form" action="#{myViewDlgBacking.selectedFileIdForDetails(row.fileId)}" title="View Details" immediate="true"
                        styleClass="ui-icon ui-icon-search" />
</p:column>

MyViewDlgBacking.java

// successfully closes the dialogue.
public void selectedFileIdForDetails(Long itemId){
    RequestContext.getCurrentInstance().closeDialog(0);
}

为什么dialogReturn没有被调用,关闭对话框后如何重定向到另一个页面?

【问题讨论】:

  • 在您的 dialogReturn() 方法中,您可以直接返回 url,如 return "myDetails?faces-redirect=true";
  • 我可以,但是对话框关闭时不会执行该方法。如果我在已关闭对话框的 selectedFileIdForDetails 中编写重定向代码,则重定向页面会在对话框中打开
  • 你在dialogReturn函数打印过日志吗?

标签: jsf jsf-2 primefaces dialog event-handling


【解决方案1】:

改成不带'()'的java方法

<p:ajax event="dialogReturn" update="@form" listener="#{userDashboardBacking.dialogReturn}" />

并将 SelectEvent 作为输入参数添加到您的方法中

public void dialogReturn(SelectEvent event){
    Long selectedId = (Long) event.getObject();
}

【讨论】:

  • 添加 SelectEvent 没有区别。 PF6 中的 DF 两者都支持。
猜你喜欢
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
相关资源
最近更新 更多