如何从另一个窗口触发的托管bean中的方法更新(重定向)主窗口?

时间:2016-08-02 11:00:05

标签: jsf jsf-2 primefaces controller

我有一个主窗口(window1),第二个窗口(window2),它是由来自托管bean和托管bean(控制器)的window.open()打开的。

window2触发控制器中的方法。如果特定条件为真,则控制器应关闭window2并将页面从/test/page1.xhtml更改为window1中的/test/page2.xhtml。

控制器中的方法如下:

String result = model.doSomething();

if (result.matches("[0-9]+")) {

    RequestContext.getCurrentInstance().execute("window.close()");

    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

    try {
        FacesContext.getCurrentInstance().getExternalContext().redirect(request.getContextPath() + "/test/page1.xhtml");
    } catch (IOException e) {
        MessageHelper.showMessage(null, e.getMessage(), FacesMessage.SEVERITY_ERROR, this);
    }
}

我想问题是HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();行。 我不知道在关闭window2之后如何命令window1立即从控制器更改页面。

解决方案必须在IE 11下运行。 我使用的是Primefaces 5.2和JSF 2.0。

1 个答案:

答案 0 :(得分:0)

这可以简单地使用JavaScript完成。只需在window.opener.document.location = '{yourlocation}';之前添加window.close()即可。所以:

RequestContext.getCurrentInstance().execute(
    "window.opener.document.location = '"+ request.getContextPath() +"/test/page1.xhtml';"+
    "window.close()"
);

另见: