文章目录
之前已经完成了管理系统的“增、删、查、改”操作,今天对查询用户显示界面做分页处理,按固定数量分页展示用户信息;同时实现“搜索”按钮的功能。
当用户数量过多时,我们无法在同一界面显示所有用户信息,需要分页展示,因此我们可以规定每个页面显示的用户数,使界面更加美观规整。在该项目中,我们设置每个页面展示五位用户的信息,在界面右下角显示分页的首页,尾页,下一页,上一页,以及每页的页数。
一、分页管理与查询
user-list.jsp
在这里截取了搜索与分页的页面实现部分
<!-- 搜索 -->
<form action="${pageContext.request.contextPath}/user/findAll.do?type=1"
method="post">
<div class="col-md-4 data1">
<input type="text" class="form-control" name="username"
placeholder="username" value="">
</div>
<button type="submit" class="btn bg-maroon">搜索</button>
</form>
<!-- 分页 -->
</div>
<!-- /.box-body -->
<div class="box-tools pull-right">
<ul class="pagination">
<li><a href="/user/findAll.do" aria-label="Previous">首页</a></li>
<li><a href="/user/findAll.do?currentPage=${pageInfo.totalPage-1}">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
<li><a href="/user/findAll.do?currentPage=${pageNum}">${pageNum}</a></li>
</c:forEach>
<li><a href="/user/findAll.do?currentPage=${pageInfo.currentPage+1}">下一页</a></li>
<li><a href="/user/findAll.do?currentPage=${pageInfo.totalPage}" aria-label="Next">尾页</a></li>
</ul>
</div>
</div>
<!-- /.box-footer-->
PageInfo.java
实体类,保存分页的各属性:
包括用户列表、用户数、每页显示用户数、总页数和当前页;
我们通过这个实体类的对象来实现用户信息的显示和分页显示。
public class PageInfo<T> {
private List<T> list; //用户列表
private int totalCount; //用户数
private int size; //每页显示用户数
private int totalPage; //总页数
private int currentPage; //当前页
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
@Override
public String toString() {
return "PageInfo{" +
"list=" + list +
", totalCount=" + totalCount +
", size=" + size +
", totalPage=" + totalPage +
", currentPage=" + currentPage +
'}';
}
}
UserController.java
通过参数将当前页传递过来
参数currentPage获取要展示的用户信息;参数username用户搜索功能。
@RequestMapping("findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue = "1") int currentPage,String username,
@RequestParam(defaultValue = "0") int type,HttpSession session){
if(type==1){
session.setAttribute("searchname",username);
}else if(type==0){
username = (String) session.getAttribute("searchname");
}else if(type==2){
session.removeAttribute("searchname");
}
PageInfo<User> pageInfo = userService.findAll(currentPage,username);
ModelAndView mv = new ModelAndView();
mv.setViewName("user-list");
mv.addObject("pageInfo",pageInfo);
return mv;
}
IUserDao.java
IUserDao提供一个接口,说明要实现什么功能
List<User> findAll(@Param("start") int start, @Param("size")int size, @Param("username") String username);
int getTotalCount(@Param("username") String username);
UserMapper.xml
具体实现IUserDao接口的功能
<select id="findAll" resultType="user">
select * from tb_user
<if test="username!=null and username != '' ">
where username like concat("%",#{username},"%")
</if>
limit #{start},#{size}
</select>
<select id="getTotalCount" resultType="int">
select count(*) from tb_user
</select>
结果展示
1、分页显示用户信息,在此展示首页与尾页的分页面
2、输入用户名,点击查询按钮即可查询用户信息
在此以用户Juddy为例展示查询功能
二、过滤器
在之前的项目介绍中,我们通过登录进入主界面,点击“用户管理”即可查询所有用户信息,在这个过程中访问路径为 /user/findAll.do,但当我们直接输入/user/findAll.do时,也成功查询到了用户信息,这样使得登录功能形同虚设,因此,我们通过过滤器来解决这种问题。
在过滤器类中,init()函数时初始化,destroy()函数用于销毁,doFilter()函数是拦截后需要执行的部分,我们在此函数内判断用户是否登录,如果用户已登录,则程序继续执行;如果用户未登录,则跳转至登录界面。
LoginFilter.java
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException{
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request= (HttpServletRequest) servletRequest;
HttpServletResponse response= (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
User user= (User) session.getAttribute("user");
String url=request.getRequestURL().toString();
if(user==null && url.indexOf("login.do")==-1){
response.sendRedirect("../login.jsp");
}else {
filterChain.doFilter(request,response);
}
}
@Override
public void destroy() {
}
}
web.xml
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.Augenstern.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
结果展示
在添加过滤器后,系统主界面访问路径为http://localhost:8081/,手动添加 /user/findAll.do并不能查询到用户信息,系统跳转至登录界面,访问路径变为http://localhost:8081/login.jsp
如下图: