是否可以从服务器端jsf代码打开资源到新的浏览器选项卡(如target="_newtab" for command buttons) ?
下面的代码在同一个选项卡中打开资源:
FacesContext.getCurrentInstance().getExternalContext().redirect("resource.jsp");
我用的是质面。我认为javascript和icefaces是有可能的
您无法在服务器端控制它。你需要在客户端控制它。例如,调用bean动作的命令按钮应该在其父<h:form>
上有一个target="_blank"
。
<h:form target="_blank">
<h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>
或者如果你没有在action方法中做任何后处理的东西,就把那个按钮全部替换成一个普通的链接。
<a href="resource.jsp" target="_blank">link</a>
我找到的最佳解决方案是:
PrimeFaces.current().executeScript("window.open('resource.jsp', '_newtab')");
或者当你没有使用PrimeFaces 6.2或更新版本时:
RequestContext.getCurrentInstance().execute("window.open('resource.jsp', '_newtab')");
这对我在Icefaces上很有效:
JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "window.open(dir, '_newtab');");
其中dir
为新制表符方向