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



在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>
然后在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>传递请求参数。

因为它是一个ajax请求,通常请求/响应用于重新呈现网页中的某些组件。你可以做的是

<p:ajax event="someventofintrest" onsuccess="javascript:myjsmethod();"></p:ajax>
and
<p:remotecommand name="myjsmethod" action="#{mybean.mybeanmethod}" />
and in the backing bean
public String mybeanmethod(){
  return "mynewpage";  // Navigate away to mynewpage.xhtml
}

HTH .

由于我没有找到一个真正完美的解决方案,所以我现在是这样做的。

我现在有一个像这样的"navigator"类

@Component
public class Navigator {
  public void nav(String page) {
    UIHelper.navigateTo(page);
  }
}
我从ajax事件中调用这个类:
<p:ajax event="rowSelect" listener="#{navigator.nav('orderDetail')}"/>

就像我说的,不是很完美,但是我喜欢我不需要在我的后台bean中编写代码的事实。(当然,我必须为Navigator编写代码,但我可以重用。)

相关内容

  • 没有找到相关文章

最新更新