0

Liferay (JSP で liferay-ui を使用) と SpringMVC を使用してポートレットを開発しています。

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 コード ブロックを取り除き、上記のコードの numberOfBooks のようにモデル属性として bookListView を使用したいと考えています。

ただし、Spring Controller から searchContainer にアクセスして、ページネーションの開始と終了を取得する方法が見つかりません...

何か案は?どうも!

4

2 に答える 2

1

コントローラに適切なSearchContainerを作成し、モデルに追加します。Prakash Kがすでに言ったように、このSearchContainerは次のようになります。

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

2つのパラメーター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 に答える
1

これはあなたのために働くかもしれません:

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

あるいは、

リクエストからパラメータを取得できます: delta=20&cur=2
はリクエストcurされた現在のページでdelta、ページ上のアイテムの総数です。 これを使用すると、liferayがこの方法で
行うように、開始 (0,20,40, ...) と終了 (19,39,59, ...) を計算できます。SearchContainer

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

    _resultEnd = _end;

    if (_resultEnd > _total) {
        _resultEnd = _total;
    }
}
于 2012-08-22T13:34:25.920 に答える