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

时间:2013-09-20 14:38:34

标签: jsf jsf-2 primefaces

Primefaces 3.5.14,Omnifaces 1.6

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

当然我可以像Styling one JSF external link to make it look like a button一样使用p:button,但在这种情况下,我必须更新p:button生成的链接,具体取决于每次在页面上执行的操作。这并不总是令人满意的。

1 个答案:

答案 0 :(得分: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>

public void submit() throws IOException {
    String redirectURL = determineItSomehow();
    Faces.redirect(redirectURL);
}