1. Thymeleaf 、Velocity、Freemarker三个模板引擎比较
Thymeleaf
springboot里面自带的。他类似Vue和Angluar的指令,并不是真正的静态模板引擎。所以对有前端团队的,不建议使用。
Velocity
静态模板引擎。类似的jsp语法,能多级编译,但文件名必须为vm。配置麻烦。层次级别不太好看。适合从事过jsp人员的使用。
Freemarker
静态模板引擎。类似标签语法,强力建议使用。不支持多级编译(这是硬伤,同时也是有效的保护了代码。)
2. Maven集成thymeLeaf
2.1 添加依赖:
<!--pageHelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
2.2
@ApiOperation(value = "新闻动态页面展示")
@RequestMapping(value = "/news-blogroll", method = RequestMethod.GET)
public String news(Model model, @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "6") Integer pageSize) {
PageHelper.startPage(page, pageSize);
PageInfo<SiteNewsMovingModulePo>(newMovingPage, pageSize);
SiteNewsMovingSearchParameter parameter = new SiteNewsMovingSearchParameter();
parameter.setPage(page);
parameter.setPageSize(pageSize);
PageResult<SiteNewsMovingModuleDomain> newMovingPage = siteNewsMovingModuleService.searchSiteNewsMovingPage(parameter);
PageInfo<SiteNewsMovingModuleDomain> pageInfo = new PageInfo<SiteNewsMovingModuleDomain>(newMovingPage.getRecords(), pageSize);
PageHelperUtil.assemblePageInfo(pageInfo, page, pageSize, newMovingPage.getTotal());
model.addAttribute("pageInfo", pageInfo);
return "news-blogroll";
}
2.3. 因PageHelper分页方法失效,自封装其计算PageInfo方法:
public static PageInfo assemblePageInfo(PageInfo pageInfo, Integer page, Integer pageSize, Integer total) {
pageInfo.setTotal(total);
pageInfo.setEndRow(total -1);
pageInfo.setSize(total);
pageInfo.setPageNum(page);
if(page == 1) {
pageInfo.setIsFirstPage(true);
pageInfo.setPrePage(1);
}else{
pageInfo.setIsFirstPage(false);
pageInfo.setPrePage(page -1);
}
pageInfo.setHasPreviousPage(true);
Integer pages = 0;
if(pageSize != 0 && total != 0) {
Double divResult = ArithUtils.div(total.doubleValue(), pageSize.doubleValue());
if(ArithUtils.remainder(total.doubleValue(), pageSize.doubleValue()) == 0) { //没有余数,结果为整除
pages = divResult.intValue();
}else {
pages = divResult.intValue() + 1;
}
if(pages > page) {
pageInfo.setHasNextPage(true);
}else {
pageInfo.setHasNextPage(false);
}
if(page < pages) {
pageInfo.setNextPage(page + 1);
}else {
pageInfo.setNextPage(page);
}
pageInfo.setIsLastPage(false);
if(pages == page) {
pageInfo.setIsLastPage(true);
}
}
pageInfo.setPages(pages);
pageInfo.setNavigatePages(pages);
int[] navigatePageNums = new int[pages];
for(int i = 0 ;i < pages; i++) {
navigatePageNums[i] = i + 1;
}
pageInfo.setNavigatepageNums(navigatePageNums);
return pageInfo;
}
2.4 thymeleaf分页代码
<div id="new-list-page">
<a th:if="${pageInfo.hasNextPage || pageInfo.pageNum==pageInfo.pages}" th:href="@{/news-blogroll.html(page=${pageInfo.nextPage})}"><div class="next fr"></div></a>
<div class="last fr">末页</div>
<ul class="pagingUl">
<li th:if="${pageInfo.pageNum!=1}" th:each="page : ${#numbers.sequence(pageInfo.pageNum-7>0?pageInfo.pageNum-7:1,pageInfo.pageNum-1)}">
<a th:href="@{/news-blogroll.html(page=${page})}" th:text="${page}"></a>
</li>
<li><a href="#" class="activ-page" th:text="${pageInfo.pageNum}"></a></li>
<li th:if="${pageInfo.pageNum!=pageInfo.pages}" th:each="page : ${#numbers.sequence(pageInfo.pageNum+1,pageInfo.pageNum+7<pageInfo.pages?pageInfo.pageNum+7:pageInfo.pages)}">
<a th:href="@{/news-blogroll.html(page=${page})}" th:text="${page}"></a>
</li>
</ul>
<div class="first fr">首页</div>
<a th:href="@{/news-blogroll.html(page=${pageInfo.prePage})}"><div class="prv fr" th:if="${pageInfo.hasPreviousPage}" ></div></a>
</div>
2.5 分页效果