在新选项卡/窗口中打开链接而不丢失当前 JSF 页面的视图范围

Posted

技术标签:

【中文标题】在新选项卡/窗口中打开链接而不丢失当前 JSF 页面的视图范围【英文标题】:Open a link in new tab/window without loosing the view scope of current JSF page 【发布时间】:2014-02-15 04:39:31 【问题描述】:

我需要在当前 JSF 页面(比如 1.xhtml)的新选项卡中打开一个新的 JSF 页面(比如 2.xhtml)。 我应该使用哪个 JSF 组件? <h:commandLink><h:outputLink>?

我不想在单击链接以在新标签中打开2.xhtml 后失去当前页面1.xhtml 的范围。

1.xhtml 的 bean 是 @ViewScoped。我应该把它改成@RequestScoped吗?

【问题讨论】:

【参考方案1】:

在 HTML 中,通过 GET 请求在新窗口/选项卡中打开给定 URL 的链接将使用 <a ... target="_blank"> 来实现。

在 JSF 中,你可以写下普通的 HTML:

<a href="#request.contextPath/2.xhtml" target="_blank">Open 2.xhtml in new window</a>

您也可以使用&lt;h:outputLink&gt;,这只有在您想使用它的rendered 属性时才有用:

<h:outputLink value="#request.contextPath/2.xhtml" target="_blank">Open 2.xhtml in new window</h:outputLink>

您也可以使用&lt;h:link&gt;,它可以获取导航结果而不是 URL,然后 JSF 将生成正确的 URL:

<h:link value="Open 2.xhtml in new window" outcome="2" target="_blank" />

bean 作用域与这一切无关。只需为它所拥有的数据选择正确的。 &lt;h:commandLink&gt; 不适合,因为它会触发 POST 请求而不是 GET 请求。

另见:

How to choose the right bean scope? How to navigate in JSF? How to make URL reflect current page (and not previous one) When should I use h:outputLink instead of h:commandLink?

【讨论】:

以上是关于在新选项卡/窗口中打开链接而不丢失当前 JSF 页面的视图范围的主要内容,如果未能解决你的问题,请参考以下文章

如何让新标签页打开新标签页中的网页。

如何在新选项卡(而不是新窗口)中打开链接? [复制]

使用 JavaScript 打开链接新窗口(不是选项卡)而不输入两次 URL? [复制]

需要在 ie8 的新标签中打开链接!

window.open(url, windowname, opts) 在新选项卡中打开,而不是在 Firefox 中打开新窗口

捕获“在新选项卡中打开链接”和“在新窗口中打开链接”事件