在新选项卡/窗口中打开链接而不丢失当前 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>
您也可以使用<h:outputLink>
,这只有在您想使用它的rendered
属性时才有用:
<h:outputLink value="#request.contextPath/2.xhtml" target="_blank">Open 2.xhtml in new window</h:outputLink>
您也可以使用<h:link>
,它可以获取导航结果而不是 URL,然后 JSF 将生成正确的 URL:
<h:link value="Open 2.xhtml in new window" outcome="2" target="_blank" />
bean 作用域与这一切无关。只需为它所拥有的数据选择正确的。 <h:commandLink>
不适合,因为它会触发 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? [复制]
window.open(url, windowname, opts) 在新选项卡中打开,而不是在 Firefox 中打开新窗口