2

我最近在学习 Spring MVC,我印象深刻的是实现一些常见的事情是多么容易,比如Pagination。例如,我有一个这样的控制器方法:

@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 →&lt;/span>
        <a th:if='${not page.lastPage}' th:href='@{${page.url}(page.page=${page.totalPages},page.size=${page.size})}'>Last →&lt;/a>
      </li>
    </ul>
  </div>
</div>

多亏了作者,这个 JSP 页面可以重用。但是我们仍然需要能够自动处理这类事情的框架,这就是我所说的 Spring MVC Compatible。这应该在前端看起来像这样,它几乎自动处理分页:

<div springUI:fragment='paginationbar' springUI:object='itemPage'/>

也许有一些额外的属性,如 firstAndLastButtonsVisible 或 currentPageDisabled 等。

对于上面的示例,由于我们在对象itemPage中拥有我们需要的所有信息(pageCount 等),因此这种简单性(或几乎)是可能的。

现在我的问题又来了,那里有一个非常兼容 Spring MVC 的 UI 框架吗?

4

3 回答 3

2

也许你正在寻找这样的方法——Rich Web Application with Spring MVC CRUD demo

在那篇文章中,它使用 Spring MVC 控制器与 ZK UI 组件无缝协作。

于 2015-11-17T06:18:48.983 回答
1

看看 spring roo ( http://projects.spring.io/spring-roo/ )。它使用某种自写的基于 jsp 的标签库。

于 2013-11-02T22:22:30.417 回答
0

您可以使用Displaytag。您需要将 list&Pageable 包装在org.displaytag.pagination.PaginatedList. 然而,这几乎是您作为 displaytag 和 spring 之间的“桥梁”所需要的一切。

于 2014-01-23T19:18:29.487 回答