如果必须从服务器初始保留目标URL,如何使用JSF打开外部URL的空白页?

Ton*_*ony 2 jsf primefaces jsf-2

Primefaces 3.5.14,Omnifaces 1.6

JSF/Prime中是否有一个看起来像按钮的组件,但是它允许用外部链接打开一个新的空白页面?因此,与普通链接不同,在点击时,必须首先从服务器保留新页面URL,然后必须打开新页面.就像带有action属性的commanButton一样,action方法的字符串结果确定新的url.

当然,我可以p:button像使用一个JSF外部链接一样使它看起来像一个按钮,但在这种情况下,我必须更新生成的链接p:button,这取决于每次在页面上进行的操作.这并不总是令人满意的.

Bal*_*usC 8

您需要target="_blank"在父窗体上提交到新窗口,并且您需要在操作方法中调用ExternalContext#redirect()(或OmniFaces' Faces#redirect()),以便让目标窗口在给定的URL上发送新的GET请求.重要的是,当您使用<p:commandButton>而不是时<h:commandButton>,您还需要设置,ajax="false"因为它不尊重target="_blank".

因此,所以:

<h:form target="_blank">
    <p:commandButton value="Submit" action="#{bean.submit}" ajax="false" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

同

public void submit() throws IOException {
    String redirectURL = determineItSomehow();
    Faces.redirect(redirectURL);
}
Run Code Online (Sandbox Code Playgroud)