从SpringMVC Controller中的liferay搜索容器访问分页信息

时间:2012-08-22 09:18:52

标签: spring-mvc liferay

我正在使用Liferay(在JSP中使用liferay-ui)和SpringMVC开发一个Portlet。

我的JSP中有以下代码:

<liferay-ui:search-container delta="5" emptyResultsMessage="no books!">
  <%
    List<Book> bookList = (List<Book>)request.getAttribute("bookList");
    List<Book> bookListView = ListUtil.subList(bookList, searchContainer.getStart(), searchContainer.getEnd());
  %>
<liferay-ui:search-container-results results="<%= bookListView %>" total="${numberOfBooks}">

</liferay-ui:search-container-results>
  ...

我真的想摆脱JSP中的Java代码块,并将bookListView作为模型属性,就像上面代码中的numberOfBooks一样。

但是,我找不到从Spring Controller访问searchContainer的方法来获取分页的开始和结束......

有什么想法吗? THX!

2 个答案:

答案 0 :(得分:1)

这可能对您有用:

SearchContainer<Book> searchContainer = new SearchContainer<Book>(renderRequest, renderResponse.createRenderURL(), null, "there are no books");

否则,

您可以从请求中获取参数:delta=20&amp; cur=2
其中cur是请求的当前页面,delta是页面上的项目总数。
使用此方法,您可以使用此方法计算开始(0,20,40,...)和结束(19,39,59,...),以及liferay的SearchContainer

private void _calculateStartAndEnd() {
    _start = (_cur - 1) * _delta;
    _end = _start + _delta;

    _resultEnd = _end;

    if (_resultEnd > _total) {
        _resultEnd = _total;
    }
}

答案 1 :(得分:1)

在控制器中创建合适的SearchContainer并将其添加到模型中。正如Prakash K已经说过这个SearchContainer看起来像这样:

SearchContainer<Book> searchContainer = new SearchContainer<Book>(renderRequest, renderResponse.createRenderURL(), null, "there are no books");

由于两个参数renderRequest和renderResponse,您无法使用@ModelAttribute批注将SearchContainer添加为模型属性。

然后JSP可以这样写:

<liferay-ui:search-container searchContainer="${model.searchContainer}" delta="${model.searchContainer.delta}" deltaParam="books_delta">
    <liferay-ui:search-container-results results="${model.searchContainer.results}" total="${model.searchContainer.total}"/>    

    <liferay-ui:search-container-row
        className="Book"
        keyProperty="primaryKey"
        modelVar="book">
        ...
    </liferay-ui:search-container-row>

    <liferay-ui:search-iterator searchContainer="${model.searchContainer}"/>

</liferay-ui:search-container>

属性deltaParam可用于配置使用的URL参数