在 SO 和 elsewhere 上有几个关于此主题的相关问题,但我找不到关于这个特定问题的明确答案。
我有一个 p:dataTable
,我希望可以单击一行并打开详细信息页面(一个新页面,而不是对话框或窗口)。
我已经用这种方法解决了(我从 primefaces 网站上得到的,由于某种原因它不再存在:http://web.archive.org/web/20101001223235/http://www.primefaces.org/showcase/ui/datatableRowSelectionInstant.jsf):
<p:dataTable var="order" value="#{orderBean.orders}" selection="#{orderBean.selectedOrder}" selectionMode="single" rowKey="#{order.number}">
<p:ajax event="rowSelect" listener="#{orderBean.orderSelect}"/>
<p:column ... />
</p:dataTable>
然后在 bean 中执行导航:
public void orderSelect(SelectEvent event) {
ConfigurableNavigationHandler nh = (ConfigurableNavigationHandler)FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
nh.performNavigation("orderDetail?faces-redirect=true");
}
我的问题:有没有一种方法可以在 JSF 内部执行此操作而无需辅助 bean 的帮助?
我之所以问,是因为他们从 primefaces 网站上删除了代码示例,这可能表明这不是做类似事情的正确方法。
最佳答案
将感兴趣的细胞包裹在一个简单的 <h:link>
中.
<p:column>
<h:link outcome="orderDetail">
...
</h:link>
</p:column>
必要时使用 CSS display:block
在链接上让它跨越整个单元格。如有必要,您可以使用嵌套的 <f:param>
传递请求参数.
关于java - 选择数据表行时打开新页面(导航到新站点),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632655/