markdown 分页 排序 搜索文章
来源:互联网 发布:数据迁移方案 详细 编辑:程序博客网 时间:2024/06/04 19:37
markdown 分页 排序 搜索文章
markdown 操作文章 :http://blog.csdn.net/qq_19558705/article/details/52171181
markdown 发表文章: http://blog.csdn.net/qq_19558705/article/details/52121321
markdown 页面编辑器: http://blog.csdn.net/qq_19558705/article/details/51993884
markdown 文字标签:http://blog.csdn.net/qq_19558705/article/details/52265947
markdown 文字标签:http://blog.csdn.net/qq_19558705/article/details/52265947
个人主页:http://www.itit123.cn/ 更多干货等你来拿
注* :这是一系列博客,若有看不懂的内容,可以看前面的博客了解。
今天谈谈文章的分页,排序,搜索功能。用的是spring Data jpa。先看效果图(比较简陋),每次都在需找合适的界面,一共四条数据,一页三条数据。
这是spring data jpa 相关教程:http://blog.csdn.net/qq_19558705/article/details/50413254
dao层代码:
public interface BlogDao extends PagingAndSortingRepository<Blog, Long>,JpaSpecificationExecutor<Blog>{}
service层代码:
public Page<Blog> getBlog(Map<String, Object> searchParams, int pageNumber, int pageSize,String sortType) {PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);Specification<Blog> spec = buildSpecification(searchParams);return blogDao.findAll(spec, pageRequest);}/** * 创建分页请求. */private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {Sort sort = null;if ("auto".equals(sortType)) {sort = new Sort(Direction.DESC, "id");} else if ("title".equals(sortType)) {sort = new Sort(Direction.ASC, "title");} else if ("createDate".equals(sortType)) {sort = new Sort(Direction.ASC, "createDate");}return new PageRequest(pageNumber - 1, pagzSize, sort);}/** * 创建动态查询条件组合. */private Specification<Blog> buildSpecification(Map<String, Object> searchParams) {Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);filters.put("isDelete", new SearchFilter("isDelete", Operator.EQ, 0));Specification<Blog> spec = DynamicSpecifications.bySearchFilter(filters.values(), Blog.class);return spec;}
controller层代码:
private static final String PAGE_SIZE = "3";private static Map<String, String> sortTypes = Maps.newLinkedHashMap();static {sortTypes.put("auto", "自动");sortTypes.put("title", "标题");sortTypes.put("createdDate", "创建时间");}@RequestMapping(value="list" ,method = RequestMethod.GET)public String execute(@RequestParam(value = "page", defaultValue = "1") int pageNumber,@RequestParam(value = "page.size", defaultValue = PAGE_SIZE) int pageSize,@RequestParam(value = "sortType", defaultValue = "auto") String sortType, Model model,ServletRequest request){Map<String, Object> searchParams = Servlets.getParametersStartingWith(request, "search_");Page<Blog> blogs = blogService.getBlog(searchParams, pageNumber, pageSize, sortType);model.addAttribute("blogs", blogs);model.addAttribute("sortType", sortType);model.addAttribute("sortTypes", sortTypes);// 将搜索条件编码成字符串,用于排序,分页的URLmodel.addAttribute("searchParams", Servlets.encodeParameterStringWithPrefix(searchParams, "search_"));return "blog/listing";}
<div class="container"><c:if test="${not empty message}"><div id="message" class="alert alert-success alert-dismissable"><button data-dismiss="alert" class="close">×</button>${message}</div></c:if><c:if test="${not empty messageError}"><div id="message-error" class="alert alert-danger alert-dismissable"><button data-dismiss="alert" class="close">×</button>${messageError}</div></c:if><div class="row"><div class="span4 offset7"><form class="form-search" action="#"><!-- 查询 。 根据后台代码,param的值要以search 开头,模糊查询需要加上LIKE --><label>标题:</label> <input type="text" name="search_LIKE_title" class="input-medium" value="${param.search_LIKE_title}"> <button type="submit" class="btn" id="search_btn">Search</button> </form> </div> <!-- 排序 --> <tags:sort/></div><c:forEach items="${blogs.content}" var="blog"><p><a href="${ctx}/blog/detail/${blog.id}">${blog.title}</a></p></c:forEach><!-- 分页 --><tags:pagination page="${blogs}" paginationSize="5"/></div>
因为分页和排序比较常用,也比较容易封装,所以单独创建了两个tag文件。
sort.tag:
<div class="nav dropdown pull-right"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <span>排序: </span>${sortTypes[param.sortType]} <b class="caret"></b> </a><ul class="dropdown-menu" > <c:forEach items="${sortTypes}" var="entry"> <li><a href="?sortType=${entry.key}&${searchParams}">${entry.value}</a></li></c:forEach></ul></div>
pagination.tag:
<%@ attribute name="page" type="org.springframework.data.domain.Page" required="true"%><%@ attribute name="paginationSize" type="java.lang.Integer" required="true"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%int current = page.getNumber() + 1;int begin = Math.max(1, current - paginationSize / 2);int end = Math.min(begin + (paginationSize - 1), page.getTotalPages());request.setAttribute("current", current);request.setAttribute("begin", begin);request.setAttribute("end", end);%><ul class="pagination"><%if (page.hasPreviousPage()) {%><li><a href="?page=1&sortType=${sortType}&${searchParams}"><<</a></li><li><a href="?page=${current-1}&sortType=${sortType}&${searchParams}"><</a></li><%} else {%><li class="disabled"><a href="#"><<</a></li><li class="disabled"><a href="#"><</a></li><%}%><c:forEach var="i" begin="${begin}" end="${end}"><c:choose><c:when test="${i == current}"><li class="active"><a href="?page=${i}&sortType=${sortType}&${searchParams}">${i}</a></li></c:when><c:otherwise><li><a href="?page=${i}&sortType=${sortType}&${searchParams}">${i}</a></li></c:otherwise></c:choose></c:forEach><%if (page.hasNextPage()) {%><li><a href="?page=${current+1}&sortType=${sortType}&${searchParams}">></a></li><li><a href="?page=${page.totalPages}&sortType=${sortType}&${searchParams}">>></a></li><%} else {%><li class="disabled"><a href="#">></a></li><li class="disabled"><a href="#">>></a></li><%}%></ul>
这样就完成了分页,排序,搜索的功能。是不是很简单。其实这远远不够,可以封装的更通用些。不知道这样有没有什么问题。先抛个砖!
最后修改了样式后的效果图:
补充:若search时字符乱码,请配置tomcat server.xml文件。修改为:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
2 0
- markdown 分页 排序 搜索文章
- 文章标题 ThinkPHP3.2.2-搜索分页
- RAILS AJAX分页排序搜索例子
- easyui datagrid 客户端搜索、分页、排序
- YII2原生SQL分页支持排序搜索
- easyui datagrid 客户端搜索、分页、排序
- MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
- Bootstrap table 分页,排序,搜索 记录
- 搜索学习--Lucene中搜索的排序、范围区间搜索、分页搜索、多条件搜索
- php文章页码的分页显示 函数 类似于Google搜索下面的分页
- 文章分页
- 文章分页
- compass 的多条件搜索排序加分页
- 分页+搜索
- 文章搜索
- ThinkPHP-TPT360 文章分页不随搜索结果变化的问题
- 分页,搜索后保留搜索条件分页
- markdown 操作文章
- Picasso
- MySQL追加注释或者大量修改注释
- zzuli 1917(晴天子序列)
- CENTOS下SSH证书登录
- Java使用文件流的方式下载文件
- markdown 分页 排序 搜索文章
- Impala实践之九:invalidate metadata详细使用方法说明
- HDU 3328 栈+模拟
- JAVA 解决tomcat占用8080端口问题
- 常用的20个正则表达式校验
- 2016.08.19上午【初中部 NOIP普及组 】模拟
- Android之surfaceView学习
- Impala实践之十:impala最佳实践(转、译、整理)
- exp11g新特性exp不能导出空表的处理方法