我有一个主窗口(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。
答案 0 :(得分:0)
这可以简单地使用JavaScript完成。只需在window.opener.document.location = '{yourlocation}';
之前添加window.close()
即可。所以:
RequestContext.getCurrentInstance().execute(
"window.opener.document.location = '"+ request.getContextPath() +"/test/page1.xhtml';"+
"window.close()"
);
另见: