0

我正在使用 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 以获取分页的开始和结束的方法......

有任何想法吗?谢谢!

4

2 回答 2

1

这可能对您有用:

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

要不然,

您可以从请求中获取参数:delta=20& cur=2
wherecur是当前请求的页面,并且delta是页面上的项目总数。
有了这个,你可以计算开始(0,20,40,...)和结束(19,39,59,...),就像liferaySearchContainer使用这种方法一样:

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

    _resultEnd = _end;

    if (_resultEnd > _total) {
        _resultEnd = _total;
    }
}
于 2012-08-22T13:34:25.920 回答
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 参数

于 2012-08-22T22:10:32.233 回答