2012-08-22 57 views
0

我正在開發一個帶Liferay的Portlet(在JSP中使用liferay-ui)和SpringMVC。訪問SpringMVC控制器中liferay搜索容器的分頁信息

我在我的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> 
    ... 

我真的想擺脫的Java代碼塊中的JSP,並有bookListView爲模型的屬性,就像在上面的代碼NUMBEROFBOOKS 。

不過,我不能找到一種方法,從Spring控制器訪問searchContainer得到的開始和分頁的結束......

任何想法?謝謝!

+0

看看這段代碼在你的控制器可以幫助:'SearchContainer searchContainer =請求.getAttribute( 「的liferay-UI:搜索:searchContainer」);' –

+0

我嘗試: @ModelAttribute( 「書目」) 公共列表 getBookList(RenderRequest中請求)拋出{SystemException的 searchContainer變奏hContainer =(SearchContainer)request.getAttribute(「liferay-ui:search:searchContainer」); 但searchContainer爲null – qollin

回答

1

這可能會爲你工作:

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

否則,

你可以從請求參數:delta=20 & 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

創建在您的控制器中使用合適的SearchContainer並將其添加到您的模型中。作爲普拉卡什ķ已經表示,這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參數