我最近在学习Spring MVC,并且我很容易实现一些常见的事情,比如分页。例如,我有一个像这样的控制器方法:
@RequestMapping(value="/showAllItems")
public String showAllItems(Model model, Pageable pageable) {
model.addAttribute("itemPage", itemService.getAllItems(pageable));
return ViewNamesHolder.SHOW_ALL_ITEMS;
}
虽然Spring通过创建这个可分页对象在后端非常支持我们,据我所知,没有任何UI框架在前端支持这种Spring对象。在编写了这个完美简单的Controller方法之后,我们再次单独在前端,关于如何显示这个可分页对象。
例如, Bootstrap 。漂亮的界面,非常好的功能。本文是如何将Spring MVC与Bootstrap集成的一个非常好的示例:http://www.javacodegeeks.com/2013/03/implement-bootstrap-pagination-with-spring-data-and-thymeleaf.html
问题是,我们仍然要写很多代码。这是上面文章中的jsp示例,最后只生成分页栏:<!-- Pagination Bar -->
<div th:fragment='paginationbar'>
<div class='pagination pagination-centered'>
<ul>
<li th:class='${page.firstPage}? 'disabled' : '''>
<span th:if='${page.firstPage}'>← First</span>
<a th:if='${not page.firstPage}' th:href='@{${page.url}(page.page=1,page.size=${page.size})}'>← First</a>
</li>
<li th:class='${page.hasPreviousPage}? '' : 'disabled''>
<span th:if='${not page.hasPreviousPage}'>«</span>
<a th:if='${page.hasPreviousPage}' th:href='@{${page.url}(page.page=${page.number-1},page.size=${page.size})}' title='Go to previous page'>«</a>
</li>
<li th:each='item : ${page.items}' th:class='${item.current}? 'active' : '''>
<span th:if='${item.current}' th:text='${item.number}'>1</span>
<a th:if='${not item.current}' th:href='@{${page.url}(page.page=${item.number},page.size=${page.size})}'><span th:text='${item.number}'>1</span></a>
</li>
<li th:class='${page.hasNextPage}? '' : 'disabled''>
<span th:if='${not page.hasNextPage}'>»</span>
<a th:if='${page.hasNextPage}' th:href='@{${page.url}(page.page=${page.number+1},page.size=${page.size})}' title='Go to next page'>»</a>
</li>
<li th:class='${page.lastPage}? 'disabled' : '''>
<span th:if='${page.lastPage}'>Last →</span>
<a th:if='${not page.lastPage}' th:href='@{${page.url}(page.page=${page.totalPages},page.size=${page.size})}'>Last →</a>
</li>
</ul>
</div>
</div>
由于作者,这个JSP页面可以重复使用。但是我们仍然需要自动处理这类事情的框架,这就是我所说的Spring MVC Compatible。这应该在前端看起来像这样,它几乎自动处理分页:
<div springUI:fragment='paginationbar' springUI:object='itemPage'/>
可能还有一些额外的属性,比如firstAndLastButtonsVisible或currentPageDisabled等。
对于上面的例子,由于我们在对象 itemPage 中有我们需要的所有信息(pageCount等),这种简单(或几乎)是可能的。
现在我的问题是,那里有一个非常适合Spring MVC的UI框架吗?
答案 0 :(得分:2)
也许您正在寻找这样的方法 - Rich Web Application with Spring MVC CRUD demo
在那篇文章中,它使用Spring MVC控制器无缝地使用ZK UI组件。
答案 1 :(得分:1)
看一下spring roo(http://projects.spring.io/spring-roo/)。它使用某种自编写的基于jsp的标记库。
答案 2 :(得分:0)
您可以使用Displaytag。您需要将列表和Pageable包装在org.displaytag.pagination.PaginatedList
的实现中。然而,这几乎就是displaytag和spring之间的“桥梁”。