我正在使用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!
答案 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参数