第一天总结 之 用户管理界面的实现 之 模糊查询和分页操作

该文章详细介绍了如何在JavaWeb项目中实现用户管理界面的模糊查询和分页功能。通过UserFuzzySelectServlet,处理GET请求,设置字符编码,获取查询参数,进行数据库查询并分页,最后将数据转发到前端页面展示。在解决问题的过程中,作者发现了当使用模糊查询后切换页码导致数据异常的bug,并给出了修复方案,即在请求中保存查询条件,以便在后续页面跳转中保持查询状态。
摘要由CSDN通过智能技术生成

第一天总结 之 用户管理界面的实现 之 模糊查询和分页操作

1、明确页面的跳转

当登录操作执行时  
          如果正确 跳转到   UserFuzzySelectServlet  即用户模糊查询的select    
   注:因为第一次写项目  对于很多操作都不熟悉  很多前期操作没         有  按着 见名之意 的方式命名    如:用户模糊查询的select  正常书写应该为 UserFuzzySelectServlet  而我第一天书写时 写的为 UserFuzzyServlet   对于后续操作 需周知
          如果错误 跳转到  登录界面  

2、用户管理前端页面的展示

这是通过直接打开jsp页面获取的界面展示
很明显看出 模糊查询是通过姓名 或 性别 如果两个都不选为查询所有的数据
在这里插入图片描述

3、UserFuzzySelectServlet的书写

 因为是select  在MVC框架中  应放在controller层下
 即:第一步  在controller下 创建 UserFuzzySelectServlet 

在这里插入图片描述
如果未找到servlet 可按下图操作在这里插入图片描述

在这里插入图片描述

 创建 UserFuzzySelectServlet  
         在dopost()下调用doset();
  在doget()方法下 进行下列操作
      1、设置请求和响应的字符集  防止中文乱码  
      2、获取当前的页码  如果为null  设置为1
      3、设置每页显示的数据个数
      4、获取前端 模糊查询 时的 依据   如 姓名  性别 
      5、通过 姓名 性别 当前页码 每页数据  进行查询
        姓名 对应sql语句中 模糊查询的  username  like   "模糊查询传的值"
        性别 对应sql中    sex = "前端传过来的性别数据"
        当前页码 和 每页的数据  对应sql语句中 的  limit  当前页码*每页数据  , 每页数据
        limit  0,5  代表 从第0条数据开始  选择前5条数据
      6、将查询出来的数据  以list集合的形式存放到 request 域中 
         从而使得  前端页面能够获取到  并且从中获取数据 展示在页面上
      7、转发数据到 前端页面  

其中 UserFuzzySelectServlet代码如下:

package com.qfedu.controller;

import com.qfedu.entity.User;
import com.qfedu.service.UserService;
import com.qfedu.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

//注解的方式  设置路径
@WebServlet(name = "UserFuzzyServlet", value = "/UserFuzzyServlet")
public class UserFuzzyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求字符集 防止中文乱码
        request.setCharacterEncoding("utf-8");

        String pageNo = request.getParameter("pageNo");
        if(pageNo==null){
            pageNo="1";
        }
        Integer pNo=Integer.valueOf(pageNo);
        int pageSize=4;

        //获取前端  模糊查询  的username和sex
        String username = request.getParameter("username");
        String sex = request.getParameter("sex");

        UserService userService =new UserServiceImpl();
        //调用service  获取一页的所有数据
        List<User> users = userService.getOnePageUsers(username,sex,pNo,pageSize);
        //将users集合存到 request域中
        request.setAttribute("users",users);

        //获取总的页数
        int pageCount=0;
        pageCount = userService.getpageCount(pageSize);
        request.setAttribute("pageNo",pNo);
        request.setAttribute("pageCount",pageCount);
        //转发到前端页面
        request.getRequestDispatcher("/after/user.jsp").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

UserServiceImpl 中 getOnePageUsers代码如下

@Override
    public List<User> getOnePageUsers(String username,String sex,int pNo,int pageSize) {
        Object[] objs={(pNo-1)*pageSize,pageSize};
        String condition=null;
        if(username !=null&&!"".equals(username)&&sex!=null&&!"".equals(sex)){
            //SELECT * FROM t_user WHERE 1=1 AND sex = "男" AND username LIKE "%a%" LIMIT 0,3
            condition=" and sex = \""+sex+"\" and username like \"%"+username+"%\" ";
        }else if (username != null && !"".equals(username)) {
            condition = " AND username LIKE \"%"+ username+"%\"";
        }else if( sex != null && !"".equals(sex)){
            condition = " AND sex=\""+sex+"\"";
        } else {
            condition = "";
        }
        return userDao.getOnePageUsers(condition,objs);
    }

UserDaoImpl 中的 getOnePageUsers代码如下

@Override
    public List<User> getOnePageUsers(String condition,Object[] objs) {
        String sql="select * from t_user where 1=1 "+condition+" limit ?,? ";
        return super.query(sql,objs,User.class);
    }

在前端代码中 展示数据 其中的部分代码截图如下
在这里插入图片描述
从而实现数据在前端页面的展示
效果图如下
在这里插入图片描述

4、遇到的问题与解决方法

测试上下页和 模糊查询 发现存在一处bug

当我 通过 模糊查询 查询数据时 即 我 查询带a的名字的数据 然后发现 查询的没有问题 但当我 点击下一页 之后 发现 我第二页的数据为 全部数据的第二页

解决方法:
在request 域中 设置两个 标识 ua ub 代表模糊查询的 username 和 sex 在servlet中 添加判断操作 如果当前的 页面传过来的 username和sex 都为null 则获取ua和ub 将username 和 sex的设置为ua ub对应的值
然后进行查询操作 最后再 重新设置一下ua ub

修改后UserFuzzySelectServlet 的代码如下

package com.qfedu.controller;

import com.qfedu.entity.User;
import com.qfedu.service.UserService;
import com.qfedu.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

@WebServlet(name = "UserFuzzySelectServlet", value = "/UserFuzzySelectServlet")
public class UserFuzzySelectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求字符集 防止中文乱码
        request.setCharacterEncoding("utf-8");

        String pageNo = request.getParameter("pageNo");
        if(pageNo==null){
            pageNo="1";
        }

        Integer pNo=Integer.valueOf(pageNo);
        int pageSize=4;

        //获取前端  模糊查询  的username和sex
        String username = request.getParameter("username");
        String sex = request.getParameter("sex");
//        System.out.println("username="+username);
//        System.out.println("sex="+sex);
//        System.out.println("///");

        if(  (username ==null||"".equals(username))&& (sex==null||"".equals(sex)) ){
            username=request.getParameter("ua");
            sex=request.getParameter("ub");
//            System.out.println("username="+username);
//            System.out.println("sex="+sex);
//            System.out.println("!!!!");
        }

        UserService userService =new UserServiceImpl();
        //调用service  获取一页的所有数据
        List<User> users = userService.getOnePageUsers(username,sex,pNo,pageSize);
        //将users集合存到 request域中
        request.setAttribute("users",users);
//        System.out.println(users);

        //获取总的页数
        int pageCount=0;
        pageCount = userService.getpageCount(username,sex,pageSize);
        request.setAttribute("pageNo",pNo);
        request.setAttribute("pageCount",pageCount);
//        System.out.println("pNo="+pNo);
//        System.out.println("pageCount="+pageCount);


        request.setAttribute("ua",username);
        request.setAttribute("ub",sex);
        //转发到前端页面
        request.getRequestDispatcher("/after/user.jsp").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

前端页面的 跳转部分 进行略微修改 原因:request域中的属性 仅只支持一次请求 之后销毁 所以我通过 跳转的url 携带上 ua和ub 从而实现 点击下一页或上一页 ua ub 依然存在
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值