要使用这些链接组件之一在新窗口中打开目标,您需要指定target="_blank"
属性,但这将在您单击链接时已经在新窗口中打开目标,因此不依赖于响应。您基本上需要在响应到达时在新窗口中打开目标。唯一的方法是window.open()
向响应返回一个 JavaScript 调用,以便它在网络浏览器中执行。
在标准 JSF 中,您可以window.open()
有条件地渲染 JavaScript。
<h:form>
<h:inputText value="#{bean.url}" />
<h:commandButton value="submit" action="#{bean.submit}">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
<h:outputScript rendered="#{bean.valid}">window.open('#{bean.url}')</h:outputScript>
</h:form>
和
private String url;
private boolean valid;
public void submit() {
valid = validate(url);
}
// ...
在 PrimeFaces 中,您可以使用RequestContext#execute()
指定在响应完成时需要执行的 JavaScript 代码。
<h:form>
<p:inputText value="#{bean.url}" />
<p:commandButton value="submit" action="#{bean.submit}" />
</h:form>
和
private String url;
public void submit() {
if (validate(url)) {
RequestContext.getCurrentInstance().execute("window.open('" + url + "')");
}
}
// ...
与具体问题无关:您在此处引用的粗俗陈述似乎是由对 HTTP/HTML 基础知识一无所知的人编写的(GET 与 POST 的限制等)。请把它们和一粒好盐一起吃。