您的位置:首页 > Web前端 > JavaScript

JSP交互---分页查询(条件分页查询)

2017-10-18 11:01 369 查看


如上图所示:

1). 用户名为空串时,点击查询—–>查询所有用户

2). 用户名输入 ” 史 ” 点击查询—–>查询的是名字中带 ” 史 ” 的用户并且点击下一页或上一页依旧查询的是名字中带 ” 史 ” 的用户.

3). 用户查询不存在的用户不会出现异常,

处理后的页面结构

<form method="post" action="UserListServlet">
用户名:<input name="name" class="input-text" type="text" value="${requestScope.name}">
    
<input value="查 询" type="submit">
</form>
<table class="list">
<tbody>
<tr>
<td width="70" height="29"><div class="STYLE1" align="center">编号</div>
</td>
<td width="80"><div class="STYLE1" align="center">用户名</div>
</td>
<td width="80"><div class="STYLE1" align="center">用户账号</div>
</td>
<td width="100"><div class="STYLE1" align="center">性别</div>
</td>
<td width="100"><div class="STYLE1" align="center">年龄</div>
</td>
<td width="150"><div class="STYLE1" align="center">电话</div>
</td>
<td width="150"><div class="STYLE1" align="center">权限</div>
</td>
</tr>

<c:forEach var="user" items="${requestScope.pb.list }" varStatus="row">
<tr>
<td height="23"><span class="STYLE1">${user.id }</span></td>
<td>
<span class="STYLE1">
<a href="UserViewServlet?userId=${user.id}"> ${user.name } </a>
</span>
</td>

<td><span class="STYLE1"> ${user.loginName } </span></td>
<td><span class="STYLE1"> ${user.gender==1?"男":"女" }</span></td>
<td><span class="STYLE1"> 2</span></td>
<td><span class="STYLE1">${user.phone }</span></td><
da73
/span>
<td><span class="STYLE1"> ${user.type==1?"管理员":"普通员工"} </span>
</td>
</tr>

</c:forEach>

</tbody>

</table>
<a href="UserListServlet?pageNo=1&name=${requestScope.name}">首页</a>
<a href="UserListServlet?pageNo=${requestScope.pb.previous}&name=${requestScope.name}">上一页</a>
<a href="UserListServlet?pageNo=${requestScope.pb.next}&name=${requestScope.name}">下一页</a>
<a href="UserListServlet?pageNo=${requestScope.pb.totalPage}&name=${requestScope.name} ">末页</a>
当前第${requestScope.pb.pageNo }页 , 总页数:${requestScope.pb.totalPage} , 总条数:${requestScope.pb.count}


一、 新建PageBean 工具类 ( 分页工具类 )

* 参考 http://blog.csdn.net/qq_39316096/article/details/78260816 内第一步*

这里重新 写下PageBean的 setCount( )方法

/**
* 设置总条数 (根据总条数  对 PageBean 进行其他数据设置)
* @param count
*/
public void setCount(Integer count) {
this.count = count;
//设置总页数
//如果count(查询结果的总条数)为0 的时候  设置总页数totalPage为1 pageNo的值也为1
//不进行判断的话容易造成 count=0时-->totalPage=0-->pageNo=0--->start=-2(造成SQL语句异常)
if(count==0){
totalPage=1;
}else{
totalPage=count%pageSize==0?count/pageSize:count/pageSize+1;
}

//验证页号
if (pageNo<0) {
pageNo=1;

}else if(pageNo>totalPage){
pageNo=totalPage;
}

//确认当前页上页的页号
if(pageNo>1){
previous=pageNo-1;
}else{
previous=1;
}
//确认当前页下页的页号
if (pageNo<totalPage) {
next=pageNo+1;
} else {
next=pageNo;
}
//计算当前页内容  在Mysql 的分页查询起始行
start = (pageNo - 1) * pageSize;


2、在UserMysqlImpl—–>用户表的数据持久化层 中添加方法

添加2个方法 : 根据条件查询多少条用户 和 根据条件 进行分页查询

/**
根据姓名 模糊查询 总共有多少条用户
*/
public int getUserCount(String name) {
//设置变量  储存多少条用户
int count =0;
//生成SQL 语句
String sql = "select count(*) from smbms_user ";
//创建集合  储存查询参数
List params = new ArrayList();
//判定传入的参数 在不为空和不是空串时 进行SQL语句拼接-----添加参数到集合
if(name!=null&&!name.equals("")){
sql+="where name like ?";
params.add("%"+name+"%");
}
// 生成 Object 填充数据--------把集合中的数据转成数据形式
Object[] obj = params.toArray();
//调用BaseDao(数据库工具类)的通用查询方法----传入参数
rs = executeQuery(sql, obj);
try {
//如果结果有内容(条数)进行 取值 复制
if (rs.next()) {
count=rs.getInt(1);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 关闭连接
closeAll(rs, ps, con);
return count;
}
/**
* 分页查询
* 根据 姓名 模糊查询所有 用户
* String name 是查询条件(可以多个)
* int start 是查询的起始行(pageNo-1)*pageSize
* int pageSize 是一页需要显示的条数
* @return  返回一个当前页需显示的 数据集合
*/
public List<User> getAll(String name,int start,int pageSize) {
//新建集合 储存需返回的数据
List<User> list = new ArrayList<User>();
// 生成SQL语句
String sql = "select * from smbms_user ";
//创建集合  储存查询参数
List params = new ArrayList();
//对条件 进行判定----拼接sql语句 储存查询参数 (多个条件进行多次判断)
if(name!=null&&!name.equals("")){
sql+="where name like ?";
params.add("%"+name+"%");
}
//拼接 分页查询的sql 语句---储存查询参数 start  pageSize
sql+="limit ?,?";
params.add(start);
params.add(pageSize);
//把集合储存的查询参数 转换成数组
Object[] obj=params.toArray();
// 调用 通用的查询方法
// 接受 查询结果
rs = executeQuery(sql, obj);
try {
while (rs.next()) {
//如果有下一行  取出数据 ---创建实体类
User user = new User(rs.getInt("user_id"),
rs.getString("name"), rs.getString("loginname"),
rs.getString("loginpwd"),  rs.getInt("gender"),rs.getDate("birthDate"),
rs.getString("phone"), rs.getString("address"),
rs.getInt("user_type"));
//把 实体类(对象) 添加到集合
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 关闭连接
closeAll(rs, ps, con);
return list;
}


3、在UserServiceImpl—–>用户表的业务逻辑类 中添加分页查询方法

/**
* 根据姓名 name 分页查询
* 获取当前页用户
* @return
*/
public PageBean getUserByNameLimit(String name,int pageNo) {
//新建 分页类的 实例
PageBean pb = new PageBean();

//写入当前页号(先写入页号)
pb.setPageNo(pageNo);

//调用数据持久化层的----->(根据姓名 模糊查询 总共有多少条用户)方法
//写入PageBean(分页工具类) 的count(总条数)属性
pb.setCount(umi.getUserCount(name));

//调用数据持久化层的----->(根据 姓名 模糊查询 当前页的所有 用户)方法
// (是一个list集合) 写入PageBean(分页工具类) 的list(当前页展示数据集合)属性
pb.setList(umi.getAll(name,pb.getStart(), pb.getPageSize()));
return pb;
}


4、新建查询 用户的 servlet—–>UserListServlet

只重写 doPost( ) 方法—–省略 字符集过滤器 和 session 过滤器

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取页号
//默认 初始值为1
int pageNo = 1;
//从页面获取页号 数据
if (request.getParameter("pageNo") != null) {
pageNo = Integer.parseInt(request.getParameter("pageNo"));

}
//从页面获取 name 数据(要查询的姓名)
String name = request.getParameter("name");

//创建User业务类的实例
UserServiceImpl usi = new UserServiceImpl();
//当前页数据---->调用User业务类的 (根据 姓名 当前页页号 获取当前页的用户)方法
PageBean pb = usi.getUserByNameLimit(name,pageNo);
//把分页工具类 pb  传到页面
request.setAttribute("pb", pb);
//把查询的 名字(查询条件)  返回页面
request.setAttribute("name", name);
request.getRequestDispatcher("/jsp/userList.jsp").forward(request,
response);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: