选择dataTable行时打开新页面(导航到新站点)

Man*_*l M 5 java jsf primefaces

在SO和其他地方有关于这个主题的几个相关问题,但我找不到关于这个具体问题的确定答案.

我有一个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>
Run Code Online (Sandbox Code Playgroud)

然后在bean中执行导航:

public void orderSelect(SelectEvent event) {  
  ConfigurableNavigationHandler nh = (ConfigurableNavigationHandler)FacesContext.getCurrentInstance().getApplication().getNavigationHandler();
  nh.performNavigation("orderDetail?faces-redirect=true");
}
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有办法在没有辅助bean的帮助下在JSF内部执行此操作?

我也问,因为他们从primefaces网站删除了代码exmaple,这可能表明这不是做这样的事情的正确方法.

Bal*_*usC 8

将感兴趣的细胞包裹在一个简单的细胞中<h:link>.

<p:column>
    <h:link outcome="orderDetail">
        ...
    </h:link>
</p:column>
Run Code Online (Sandbox Code Playgroud)

必要display:block时使用链接上的CSS 让它跨越整个单元格.如有必要,您可以使用嵌套来传递请求参数<f:param>.


Man*_*l M 1

由于我没有找到真正完美的解决方案,这就是我现在的做法。

我现在有一个像这样的“导航”类

@Component
public class Navigator {
  public void nav(String page) {
    UIHelper.navigateTo(page);
  }
}
Run Code Online (Sandbox Code Playgroud)

我从我的 ajax 事件中调用这个类:

<p:ajax event="rowSelect" listener="#{navigator.nav('orderDetail')}"/>
Run Code Online (Sandbox Code Playgroud)

正如我所说,并不是很完美,但我喜欢这样一个事实:我不必在支持 bean 中编写代码。(当然,我必须为导航器编写代码,但我可以重复使用。)