2012-03-16 26 views
2

为了显示搜索结果,我们使用Primefaces数据表组件来排序,分页和LazyDataModel。搜索页面的后台bean是ViewScoped带有分页和排序以及浏览器返回的JSF数据表

从搜索结果列表中,用户可以选择结果项目以查看详细信息。这是作为新的页面请求实现的,例如, <h:link value="Show Details" outcome="showDetails?id=11234"/>。通过点击浏览器后退按钮,用户将回到搜索结果列表。

问题是数据表会再次处于初始状态,所以它不会显示最后选择的排序顺序和页面。在大多数浏览器中都是如此,只有Firefox 11似乎将这些DOM更改保留在缓存中。无论是IE还是Chrome。

有没有人有一个很好的方法来处理这个问题?我们实际上不需要“ajaxified”排序和分页。我们宁愿通过ViewParams来处理所有事情,但这似乎不被primefaces支持。

回答

1

我也遇到了这个问题,并且我开发了一种可能有用的编码模式。它并不是一个真正的PrimeFaces(我正在使用它) - 更多使用JSF 2使用书签链接的技术。

在标记中,我包含页面的所有参数,如下所示:

 <f:metadata> 
      <f:viewParam name="orderID" value="#{bean.orderID}" /> 
      <f:viewParam name="sortMode" value="#{bean.sortMode}" /> 
      <f:viewParam name="firstRecord" value="#{bean.firstRecord}" /> 
      <f:viewParam name="pageSize" value="#{bean.pageSize}" /> 
     </f:metadata> 

这些值中的每一个都在backing bean中支持,因此如果它们未设置,它们将生成一个合适的默认值。例如:

现在你实现用户控制,以改变这些值,并且它们每一个被改变的时间重新生成的表:

public int getPageSize() { 
    if (pageSize < MIN_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    if (pageSize > MAX_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    return pageSize; 
} 

甲连结此视图可如下生成。你应该仍然使用AJAX为 - 例如:

<p:spinner value=#{bean.pageSize} > 
    <p:ajax update="tableID" /> 
</p:spinner> 

在setter方法,你必须触发重新生成的表,但是这是它的要点。我希望这有帮助。

UPDATE:

为了处理分页,你只需要添加的第一页,前一页,下页,等等链接的链接将是这个样子:

<h:link value="First Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="0" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 
<h:link value="Next Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="#{bean.nextRecord}" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 

等你需要在后台bean中实现属性来计算参数应该是什么。

+0

thx,是有页和排序参数视图params是我比ajax更喜欢。但我的问题是更多关于如何处理分页和使用这种方法使用primefaces中的数据加载数据进行排序。 – fischermatte 2012-03-18 20:48:50

+0

@fischermatte查看更新。 – AlanObject 2012-03-18 23:24:42

+0

仍然 - 你如何告知primefaces数据表中的paginator和排序按钮,他们不应该执行ajax请求,而是用这些参数调用新的页面请求?我看到的唯一解决方案就是用这样的排序和分页编写自己的数据表组件。但如果我是第一个遇到这个问题的人,我真的很好奇。从我的角度来看,这是应该由组件框架处理的功能。 – fischermatte 2012-03-19 08:24:43