8.修改 按条件查询商品 分页

修改商品的原理图

jsp页面

edit.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<HTML>
<HEAD>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<LINK href="${pageContext.request.contextPath}/admin/css/Style.css"
	type="text/css" rel="stylesheet">
<script language="javascript"
	src="${pageContext.request.contextPath}/admin/js/public.js"></script>
<script language="javascript"
	src="${pageContext.request.contextPath}/admin/js/check.js"></script>

</HEAD>
<body>

	<!--
		上传文件
		enctype="multipart/form-data"
		修改语句:update products set xxx xxx xxx where pid=?
		偷偷的传
	 -->
	<form id="userAction_save_do" name="Form1" action="${pageContext.request.contextPath }/product" method="post" >

		<!-- post提交方法添加一个隐藏域 -->
		<input type="hidden" name="method" value="update"/>
		<input type="hidden" name="pid" value="${product.pid }"/>

		<table cellSpacing="1" cellPadding="5" width="100%" align="center"
			bgColor="#eeeeee" style="border: 1px solid #8ba7e3" border="0">
			<tr>
				<td class="ta_01" align="center" bgColor="#afd1f3" colSpan="4"
					height="26"><strong><STRONG>编辑商品</STRONG> </strong></td>
			</tr>

			<tr>
				<td align="center" bgColor="#f5fafe" class="ta_01">商品名称:</td>
				<td class="ta_01" bgColor="#ffffff">
					<input type="text" name="pname" class="bg" value="${product.pname }" /></td>
				<td align="center" bgColor="#f5fafe" class="ta_01">商品价格:</td>
				<td class="ta_01" bgColor="#ffffff">
					<input type="text" name="price" class="bg" value="${product.price }" /></td>
			</tr>
			<tr>
				<td align="center" bgColor="#f5fafe" class="ta_01">商品数量:</td>
				<td class="ta_01" bgColor="#ffffff">
					<input type="text" name="pnum" class="bg" value="${product.pnum }" /></td>
				<td align="center" bgColor="#f5fafe" class="ta_01">商品类别:</td>
				<td class="ta_01" bgColor="#ffffff">

					<%-- 判断类别
					<c:if test="${product.category eq ‘计算机‘ }">selected</c:if> --%>

					<select name="category" id="category">
						<option value="">--选择商品类加--</option>
						<option value="文学" <c:if test="${product.category eq ‘文学‘ }">selected</c:if>>文学</option>
						<option value="生活" <c:if test="${product.category eq ‘生活‘ }">selected</c:if>>生活</option>
						<option value="计算机" <c:if test="${product.category eq ‘计算机‘ }">selected</c:if>>计算机</option>
						<option value="外语" <c:if test="${product.category eq ‘外语‘ }">selected</c:if>>外语</option>
						<option value="经营" <c:if test="${product.category eq ‘经营‘ }">selected</c:if>>经营</option>
						<option value="励志" <c:if test="${product.category eq ‘励志‘ }">selected</c:if>>励志</option>
						<option value="社科" <c:if test="${product.category eq ‘社科‘ }">selected</c:if>>社科</option>
						<option value="学术" <c:if test="${product.category eq ‘学术‘ }">selected</c:if>>学术</option>
						<option value="少儿" <c:if test="${product.category eq ‘少儿‘ }">selected</c:if>>少儿</option>
						<option value="艺术" <c:if test="${product.category eq ‘艺术‘ }">selected</c:if>>艺术</option>
						<option value="原版" <c:if test="${product.category eq ‘原版‘ }">selected</c:if>>原版</option>
						<option value="科技" <c:if test="${product.category eq ‘科技‘ }">selected</c:if>>科技</option>
						<option value="考试" <c:if test="${product.category eq ‘考试‘ }">selected</c:if>>考试</option>
						<option value="生活百科" <c:if test="${product.category eq ‘生活百科‘ }">selected</c:if>>生活百科</option>
				</select></td>
			</tr>

			<tr>
				<td align="center" bgColor="#f5fafe" class="ta_01">商品图片:</td>
				<td class="ta_01" bgColor="#ffffff" colSpan="3">
					<input type="file" name="upload" size="30" value="" /></td>
			</tr>
			<TR>
				<TD class="ta_01" align="center" bgColor="#f5fafe">商品描述:</TD>
				<TD class="ta_01" bgColor="#ffffff" colSpan="3">
					<textarea name="description" cols="30" rows="3" style="WIDTH: 96%">${product.description}</textarea>
				</TD>
			</TR>
			<TR>
				<td align="center" colSpan="4" class="sep1"><img
					src="${pageContext.request.contextPath}/admin/images/shim.gif">
				</td>
			</TR>

			<tr>
				<td class="ta_01" style="WIDTH: 100%" align="center" bgColor="#f5fafe" colSpan="4">
					<!-- 提交 -->
					<input type="submit"class="button_ok" value="确定">
					<FONT face="宋体">       </FONT>

					<!-- 重置 -->
					<input type="reset" value="重置" class="button_cancel"> <FONT
					face="宋体">       </FONT> 

					<!-- 返回 -->
					<INPUT class="button_ok" type="button" onclick="history.go(-1)" value="返回" />
					<span id="Label1"> </span>
				</td>
			</tr>
		</table>
	</form>

</body>
</HTML>

list.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<HTML>
<HEAD>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="${pageContext.request.contextPath}/admin/css/Style.css"
	rel="stylesheet" type="text/css" />
<script language="javascript"
	src="${pageContext.request.contextPath}/admin/js/public.js"></script>
<script type="text/javascript">
	//点击添加的按钮,跳转到添加商品的页面
	function addProduct() {
		//相当于超链接
		window.location.href = "${pageContext.request.contextPath}/admin/products/add.jsp";
	}
</script>
</HEAD>
<body>
	<br>
	<!--
		按条件查询
		按条件查询
		按条件查询
		按条件查询
		按条件查询
	 -->
	<form id="Form1" name="Form1" action="${pageContext.request.contextPath}/product" method="post">

		<input type="hidden" name="method" value="findByWhere"/>

		<table cellSpacing="1" cellPadding="0" width="100%" align="center" bgColor="#f5fafe" border="0">
			<TBODY>
				<tr>
					<td class="ta_01" align="center" bgColor="#afd1f3">
						<strong>查询 条 件</strong>
					</td>
				</tr>
				<tr>
					<td>
						<table cellpadding="0" cellspacing="0" border="0" width="100%">
							<tr>
								<td height="22" align="center" bgColor="#f5fafe" class="ta_01">
									商品编号:
								</td>
								<td class="ta_01" bgColor="#ffffff">
									<input type="text" name="pid" size="15"  id="Form1_userName" class="bg" />
								</td>

								<td height="22" align="center" bgColor="#f5fafe" class="ta_01">
									类别:
								</td>
								<td class="ta_01" bgColor="#ffffff">
									<select name="category" id="category">
										<option value="" selected="selected">--选择商品类加--</option>
										<option value="文学">文学</option>
										<option value="生活">生活</option>
										<option value="计算机">计算机</option>
										<option value="外语">外语</option>
										<option value="经营">经营</option>
										<option value="励志">励志</option>
										<option value="社科">社科</option>
										<option value="学术">学术</option>
										<option value="少儿">少儿</option>
										<option value="艺术">艺术</option>
										<option value="原版">原版</option>
										<option value="科技">科技</option>
										<option value="考试">考试</option>
										<option value="生活百科">生活百科</option>
									</select>
								</td>
							</tr>

							<tr>
								<td height="22" align="center" bgColor="#f5fafe" class="ta_01">
									商品名称:
								</td>
								<td class="ta_01" bgColor="#ffffff">
									<input type="text" name="pname" size="15" id="Form1_userName" class="bg" />
								</td>

								<td height="22" align="center" bgColor="#f5fafe" class="ta_01">价格区间(元):</td>
								<td class="ta_01" bgColor="#ffffff">
									<input type="text" name="minprice" size="10" />-
									<input type="text" name="maxprice" size="10" />
								</td>
							</tr>

							<tr>
								<td width="100" height="22" align="center" bgColor="#f5fafe"class="ta_01"></td>
								<td class="ta_01" bgColor="#ffffff">
									<font face="宋体" color="red">  </font>
								</td>
								<td align="right" bgColor="#ffffff" class="ta_01"><br><br></td>

								<td align="right" bgColor="#ffffff" class="ta_01">
									<button type="submit" id="search" name="search" value="查询" class="button_view">
										查询
									</button>      
									<input type="reset" name="reset" value="重置" class="button_view" />
								</td>
							</tr>
						</table>
					</td>
				</tr>

				<tr>
					<td class="ta_01" align="center" bgColor="#afd1f3"><strong>商品列表</strong>
					</TD>
				</tr>
				<tr>
					<td class="ta_01" align="right">
						<!--
							添加的按钮
							添加的按钮
							添加的按钮
							添加的按钮
							添加的按钮
							添加的按钮
							添加的按钮
							添加的按钮
						 -->
						<button type="button" id="add" name="add" value="添加;"
							class="button_add" onclick="addProduct()">添加
						</button>
					</td>
				</tr>
				<tr>
					<td class="ta_01" align="center" bgColor="#f5fafe">
						<table cellspacing="0" cellpadding="1" rules="all"
							bordercolor="gray" border="1" id="DataGrid1"
							style="BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid; WIDTH: 100%; WORD-BREAK: break-all; BORDER-BOTTOM: gray 1px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #f5fafe; WORD-WRAP: break-word">
							<tr
								style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; HEIGHT: 25px; BACKGROUND-COLOR: #afd1f3">
								<td align="center" width="24%">序号</td>
								<td align="center" width="18%">商品名称</td>
								<td align="center" width="9%">商品价格</td>
								<td align="center" width="9%">商品数量</td>
								<td width="8%" align="center">商品类别</td>
								<td width="8%" align="center">编辑</td>

								<td width="8%" align="center">删除</td>
							</tr>

							<!-- for标签想象增强for循环 for(数据类型 变量:要遍历的集合) -->
							<c:forEach var="p" items="${pList }" varStatus="vs"> <!-- varStatus用于迭代数据,从1开始 -->
								<tr onmouseover="this.style.backgroundColor = ‘white‘"
									onmouseout="this.style.backgroundColor = ‘#F5FAFE‘;">
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="23">${vs.count }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="18%">${p.pname }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="8%">${p.price }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center"
										width="8%">${p.pnum }</td>
									<td style="CURSOR: hand; HEIGHT: 22px" align="center">
										${p.category }</td>

									<!--
										编辑修改
										编辑修改
										编辑修改
										编辑修改
										编辑修改
										编辑修改
									 -->
									<td align="center" style="HEIGHT: 22px" width="7%">
										<a href="${pageContext.request.contextPath }/product?method=initUpdate&pid=${p.pid}">
											<img
											src="${pageContext.request.contextPath}/admin/images/i_edit.gif"
											border="0" style="CURSOR: hand"> </a>
									</td>

									<td align="center" style="HEIGHT: 22px" width="7%"><a
										href="#">
											<img
											src="${pageContext.request.contextPath}/admin/images/i_del.gif"
											width="16" height="16" border="0" style="CURSOR: hand">
									</a>
									</td>
								</tr>
							</c:forEach>
						</table>
					</td>
				</tr>
			</TBODY>
		</table>
	</form>
</body>
</HTML>

三层架构

/**
 * 商品的控制器
 * @author mjl
 *
 */
public class ProductServlet extends BaseServlet {

	/**
	 * 添加商品
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void addProduct(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 1.接收数据
		 * 2.封装数据
		 * 3.处理数据
		 * 4.显示数据
		 */

		//接收数据
		Map<String,String[]> map=request.getParameterMap();
		Product p=new Product();
		try {
			//封装数据
			BeanUtils.populate(p, map);
			System.out.println(p);

			//处理数据
			ProductService ps=new ProductService();
			//保存数据
			ps.save(p);

			//如果添加成功,重定向到findAll
			response.sendRedirect(request.getContextPath()+"/product?method=findAll");
		} catch (Exception e) {
			e.printStackTrace();
			//捕获异常
			request.setAttribute("msg", e.getMessage());
			request.getRequestDispatcher("/admin/products/add.jsp").forward(request, response);
		}
	}

	/**
	 * 查询所有的商品
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		/**
		 * 1.接收数据
		 * 2.封装数据
		 * 3.处理数据
		 * 4.显示数据
		 */

		//没有参数,也不用封装
		ProductService ps=new ProductService();
		//查询所有的商品的信息
		List<Product> pList=ps.findAll();
		//存入到request域对象中
		request.setAttribute("pList", pList);
		request.getRequestDispatcher("/admin/products/list.jsp").forward(request, response);

		/*前后两个页面 有数据传递 用请求转发,没有则用重定向。
		比如servlet查询了数据需要在页面显示,就用请求转发。
		比如servlet做了update操作跳转到其他页面,就用重定向。*/
	}

	/**
	 * 初始化的修改页面
	 * 用于点击编辑按钮跳转到编辑页面
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */

	public void initUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 通过主键去查询该条记录
		 */
		String pid=request.getParameter("pid");
		ProductService ps=new ProductService();
		Product p=ps.findById(pid);

		//存入到request域
		/**
		 * 服务器端域对象 域对象可以共享数据
		 * servletContext  服务器启动,ServletContext创建了,服务器关闭的时候,销毁!与天地同寿!!被所有的资源共享。
		 * HttpSession     代表一次会话!打开浏览器开始,关闭浏览器结束。发送多次请求,得到多次响应。保存每个人相关的信息。
		 * request		        代表一次请求。只能发送一次,发送完毕就销毁。保存一些提示的信息,或者要显示的数据的。
		 */
		request.setAttribute("product", p);
		request.getRequestDispatcher("/admin/products/edit.jsp").forward(request, response);
	}

	/**
	 * 修改商品
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取数据
		Map<String,String[]> map=request.getParameterMap();
		Product product=new Product();
		try {
			BeanUtils.populate(product, map);
			ProductService ps=new ProductService();
			ps.update(product);

			//跳转到页面
			//如果修改成功,重定向到findAll
			response.sendRedirect(request.getContextPath()+"/product?method=findAll");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 按条件查询所有的商品
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void findByWhere(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收请求的参数
		String pid=request.getParameter("pid");
		String category=request.getParameter("category");
		String pname=request.getParameter("pname");
		String minprice=request.getParameter("minprice");
		String maxprice=request.getParameter("maxprice");

		//调用持久层
		ProductService ps=new ProductService();

		List<Product> pList=ps.findByWhere(pid,category,pname,minprice,maxprice);

		request.setAttribute("pList", pList);
		request.getRequestDispatcher("/admin/products/list.jsp").forward(request, response);
	}
}

/**
 * 商品业务层
 * @author mjl
 *
 */
public class ProductService {

	/**
	 * 保存商品
	 * @param p
	 * @throws SQLException
	 * @throws MyException
	 */
	public void save(Product p) throws SQLException, MyException{
		//自己维护主键
		p.setPid(MyUUIDUtils.getUUID());

		//先设置imgurl属性值为Null
		p.setImgUrl(null);

		//调用持久层,保存数据
		ProductDao dao=new ProductDao();
		dao.save(p);
	}

	/**
	 * 查询所有的商品
	 * @return
	 */
	public List<Product> findAll() {

		ProductDao dao=new ProductDao();
		return dao.findAll();
	}

	/**
	 * 通过主键查询该条记录
	 * @param pid
	 * @return
	 */
	public Product findById(String pid) {

		ProductDao dao=new ProductDao();
		return dao.findById(pid);
	}

	/**
	 * 修改商品
	 * @param product
	 */
	public void update(Product product) {

		ProductDao dao=new ProductDao();
		dao.update(product);
	}

	/**
	 * 按条件查询
	 * @param pid
	 * @param category
	 * @param pname
	 * @param minprice
	 * @param maxprice
	 * @return
	 */
	public List<Product> findByWhere(String pid, String category, String pname, String minprice, String maxprice) {

		ProductDao dao=new ProductDao();
		return dao.findByWhere(pid,category,pname,minprice,maxprice);
	}

	public List<Product> findByCondition(String pid, String category, String pname, String minprice, String maxprice) {
		ProductDao dao=new ProductDao();
		return dao.findByCondition(pid,category,pname,minprice,maxprice);
	}
}

/**
 * 商品的持久层
 * @author mjl
 *
 */
public class ProductDao {

	public void save(Product p) throws SQLException, MyException{
		//使用DBUtils工具类
		QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());
		//编写sql语句
		String sql="insert into products values(?,?,?,?,?,?,?)";
		Object [] params={p.getPid(),p.getPname(),p.getPrice(),p.getCategory(),p.getPnum(),p.getImgUrl(),p.getDescription()};
		//执行sql语句,如果成功,返回1
		int count=runner.update(sql, params);
		if(count!=1){
			throw new MyException("亲,添加商品错误");
		}
	}

	public List<Product> findAll() {

		QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());
		try {
			return runner.query("select * from products", new BeanListHandler<Product>(Product.class));
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询所有的商品错误了!");
		}
	}

	public Product findById(String pid) {

		QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());
		try {
			Product p=runner.query("select * from products where pid=?", new BeanHandler<Product>(Product.class),pid);
			return p;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("查询该条记录错误了!");
		}
	}

	public void update(Product p) {
		QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());
		String sql="update products set pname=?,price=?,category=?,pnum=?,imgurl=?,description=? where pid=?";
		Object [] params={p.getPname(),p.getPrice(),p.getCategory(),p.getPnum(),p.getImgUrl(),p.getDescription(),p.getPid()};
		try {
			runner.update(sql,params);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public List<Product> findByWhere(String pid, String category, String pname, String minprice, String maxprice) {

		//创建集合,用来存储参数
		List<Object> list=new ArrayList<Object>();

		QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());

		//拼接sql语句
		StringBuffer sb=new StringBuffer("select * from products where 1=1 ");

		//判断参数是否为空,如果不为空,说明用户输入了这些值,如果为空,说明没有输入
		if(pid!=null && !pid.trim().isEmpty()){ //trim()去掉空格
			//拼接sql语句
			sb.append(" and pid like ? "); //like模糊查询
			list.add("%"+pid+"%");
		}

		if(category!=null && !category.trim().isEmpty()){ //trim()去掉空格
			//拼接sql语句
			sb.append(" and category = ? ");
			list.add(category);
		}

		if(pname!=null && !pname.trim().isEmpty()){ //trim()去掉空格
			//拼接sql语句
			sb.append(" and pname = ? ");
			list.add(pname);
		}

		if(minprice!=null && !minprice.trim().isEmpty()){ //trim()去掉空格
			//拼接sql语句
			sb.append(" and price > ? ");
		}

		if(maxprice!=null && !maxprice.trim().isEmpty()){ //trim()去掉空格
			//拼接sql语句
			sb.append(" and price < ? ");
			list.add(maxprice);
		}

		//执行
		try {
			return runner.query(sb.toString(), new BeanListHandler<Product>(Product.class),list.toArray());
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}

	}

	public List<Product> findByCondition(String pid, String category, String pname, String minprice, String maxprice) {

		StringBuffer sb=new StringBuffer();
		sb.append("select * from products where 1=1 ");

		List<Object> list=new ArrayList();

		QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());

		if(pid!=null && !pid.trim().isEmpty()){
			sb.append(" and pid like ? ");
			list.add("%"+pid+"%");
		}

		if(category!=null && !category.trim().isEmpty()){
			sb.append(" and category = ? ");
			list.add(category);
		}

		if(pname!=null && !pname.trim().isEmpty()){
			sb.append(" and pname = ? ");
			list.add(pname);
		}
		if(minprice!=null && !minprice.trim().isEmpty()){
			sb.append(" and price > ? ");
			list.add(minprice);
		}
		if(maxprice!=null && !maxprice.trim().isEmpty()){
			sb.append(" and price< ? ");
			list.add(maxprice);
		}

		try {
			return runner.query(sb.toString(), new BeanListHandler<Product>(Product.class),list.toArray());
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return null;
	}

}

  

分页的实现

jsp页面中,点击全部商品跳转servlet

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/my.js">

</script>
<script type="text/javascript">

</script>

<div id="divmenu">
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=文学">文学</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=生活">生活</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=计算机">计算机</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=外语">外语</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=经营">经管</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=励志">励志</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=社科">社科</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=学术">学术</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=少儿">少儿</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=艺术">艺术</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=原版">原版</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=科技">科技</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=考试">考试</a>
	<a
		href="${pageContext.request.contextPath}/showProductByPage?category=生活百科">生活百科</a>
	<a href="${pageContext.request.contextPath}/product?method=findByPage" style="color:#FFFF00">全部商品目录</a>
</div>
<div id="divsearch">
	<form action="${pageContext.request.contextPath}/findProductBySearch"
		method="post">
		<table width="100%" border="0" cellspacing="0">
			<tr>
				<td style="text-align:right; padding-right:220px">
				Search <input
					type="text" name="name" class="inputtable" onkeyup="searchName();"
					id="name" />
					<input type="image" src="images/serchbutton.gif"
					border="0" style="margin-bottom:-4px">
				</td>
			</tr>
		</table>

	</form>
</div>
<div id="content"
	style="background-color:white;width:128px; text-align:left;margin-left:945px;color:black;float:left;margin-top: -20px;display: none">
</div>

ProductServlet处理业务逻辑

/**
	 * 分页查询
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	public void findByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/**
		 * 1.解决当前页的问题
		 *  以后用户在客户端给我传参数,如果参数为null,说明是第一页,如果不为空,传的是几页就是几页
		 * 2.每一页显示的条数的问题
		 */

		//1.解决当前页的问题
		int pageCode=getPageCode(request);

		//2.解决每页显示的记录条数
		int pageSize=4;

		//调用业务层
		ProductService ps=new ProductService();

		//分页的查询
		PageBean page=ps.findByPage(pageCode,pageSize);

		//存入
		request.setAttribute("page", page);
		request.getRequestDispatcher("/product_list.jsp").forward(request, response);
	}

	/**
	 * 获取当前页
	 * @param request
	 * @return
	 */
	public int getPageCode(HttpServletRequest request){
		//获取当前页
		String pc=request.getParameter("pc");
		//判断,说明pc没有传,说明第一次
		if(pc==null){
			return 1;
		}else{
			return Integer.parseInt(pc);
		}
	}

  

ProductService

/**
	 * 分页的查询
	 * @param pageCode
	 * @param pageSize
	 * @return
	 */
	public PageBean findByPage(int pageCode, int pageSize) {
		ProductDao dao=new ProductDao();
		return dao.finByPage(pageCode,pageSize);
	}

  

ProductDao

/**
	 * 分页的查询
	 * @param pageCode
	 * @param pageSize
	 * @return
	 */
	public PageBean finByPage(int pageCode, int pageSize) {
		//目的:创建PageBean对象,把所有的属性数据全部搞定
		PageBean<Product> page=new PageBean();
		page.setPageCode(pageCode);
		page.setPageSize(pageSize);

		QueryRunner runner=new QueryRunner(MyJdbcUtils.getDataSource());

		//设置总的记录数
		String countSql="select count(*) from products ";
		String selSql="select * from products limit ?,?";

		try {
			//查询总的记录数
			long totalCount=(long) runner.query(countSql, new ScalarHandler());

			//设置总的记录数
			page.setTotalCount((int)totalCount);

			//查询每页显示的数据
			List<Product> beanList=runner.query(selSql, new BeanListHandler<Product>(Product.class),(pageCode-1)*pageSize,pageSize);

			//设置每页显示的数据
			page.setBeanList(beanList);

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return page;
	}

  

product_list.jsp页面显示分页内容

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>bookStore列表</title>
<%--导入css --%>
<link rel="stylesheet" href="css/main.css" type="text/css" />
</head>

<body class="main">

	<jsp:include page="head.jsp" />
	<jsp:include page="menu_search.jsp" />

	<div id="divpagecontent">
		<table width="100%" border="0" cellspacing="0">
			<tr>

				<td>
					<div style="text-align:right; margin:5px 10px 5px 0px">
						<a href="index.jsp">首页</a>    >    计算机    >    图书列表
					</div>

					<table cellspacing="0" class="listcontent">
						<tr>
							<td>
								<h1>商品目录</h1>
								<hr />
								<h1>计算机</h1>    共${page.totalCount }种商品
								<hr />
								<div style="margin-top:20px; margin-bottom:5px">
									<img src="images/productlist.gif" width="100%" height="38" />
								</div>
								<table cellspacing="0" class="booklist">

									<!-- 一页只有四个 对象,所以遍历4次  -->
									<tr>
										<c:forEach var="p" items="${page.beanList }">
											<td>
												<div class="divbookpic">
													<p>
														<a href="product_info.jsp">
															<img src="bookcover/101.jpg" width="115" height="129" border="0" />
														</a>
													</p>
												</div>

												<div class="divlisttitle">
													<a href="product_info.jsp">书名:${p.pname }<br />售价:${p.price } </a>
												</div>
											</td>
										</c:forEach>
									</tr>
								</table>

								<div class="pagination">
									<ul>
										<c:if test="${page.pageCode>1 }">
											<li class="disablepage">
												<a href="${pageContext.request.contextPath }/product?method=findByPage&pc=${page.pageCode-1}" >上一页</a>
											</li>
										</c:if>

										<!--也可以产生这种循环 for(int i=1;i<=10;i++){} -->
										<%--
											目的:控制begin和end的值
											逻辑:
												当总页数<=10,说明一共不超过10页,让begin=1,end=总页数
												当总页数>10,让begin=pageCode-5,end=pageCode+4
													头溢出:
														如果当前页=3,begin=3-5=-2
														如果begin<1,让begin=1,end=10
													尾溢出:
														如果end>总页数,让end=总页数,begin=总页数-9
										 --%>

										<!--  编写逻辑  判断开始页码结束页码-->
										 <c:choose>
										 	<c:when test="${page.totalPage<=10 }">
										 		<c:set var="begin" value="1" ></c:set>
												<c:set var="end" value="${page.totalPage }"></c:set>
										 	</c:when>
										 	<c:otherwise>
										 		<c:set var="begin" value="${page.pageCode-5 }" ></c:set>
										 		<c:set var="end" value="${page.pageCode+4 }"></c:set>

										 		<!-- 判断头溢出 -->
										 		<c:if test="${begin<1 }">
										 			<c:set var="begin" value="1" ></c:set>
										 			<c:set var="end" value="10"></c:set>
										 		</c:if>

										 		<!-- 判断尾溢出 -->
										 		<c:if test="${end>page.totalPage }">
										 			<c:set var="begin" value="${page.totalPage-9 }" ></c:set>
										 			<c:set var="end" value="${page.totalPage }"></c:set>
										 		</c:if>
										 	</c:otherwise>
										 </c:choose>

										<c:forEach var="i" begin="${begin }" end="${end }" step="1">
											<!-- 当前页==i -->
											<c:if test="${page.pageCode==i }">
												<li class="currentpage">${i }</li>
											</c:if>
											<c:if test="${page.pageCode!=i }">
												<li><a href="${pageContext.request.contextPath }/product?method=findByPage&pc=${i}">${i }</a>
											</c:if>
										</c:forEach>

										<c:if test="${page.pageCode<page.totalPage }">
											<li class="nextpage">
												<a href="${pageContext.request.contextPath }/product?method=findByPage&pc=${page.pageCode+1}">下一页</a>
											</li>
										</c:if>

									</ul>
								</div>
							</td>
						</tr>
					</table>
				</td>
			</tr>
		</table>
	</div>

	<jsp:include page="foot.jsp" />

</body>
</html>

  

原文地址:https://www.cnblogs.com/syj1993/p/8453022.html

时间: 2024-11-05 22:47:52

8.修改 按条件查询商品 分页的相关文章

(四)Oracle条件查询,分页查询

1. SQL(基础查询) 1.1基础查询 1.1.1. 使用LIKE条件(模糊查询) 当用户在执行查询时,不能完全确定某些信息的查询条件,或者只知道信息的一部分,可以借助LIKE来实现模糊查询.LIKE需要借助两个通配符: %:表示0到多个字符 _:标识单个字符 这两个通配符可以配合使用,构造灵活的匹配条件.例如查询职员姓名中第二个字符是'A'的员工信息: SELECT ename, job FROM emp WHERE ename LIKE '_A%'; 1.1.2. 使用IN和NOT IN

(转)Entity Framework4.1实现动态多条件查询、分页和排序

原文:http://www.cnblogs.com/ahui/archive/2011/08/04/2127282.html EF通用的分页实现: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /// <summary> /// 根据条件分页获得记录 /// </summary> /// <param name="where">条件</param> /// <

PHP连接数据库实现多条件查询与分页功能——关于租房页面的完整实例操作

租房页面如图: 代码如下: <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title>租房子</title>        <script src="bootstrap/js/jquery-1.11.2.min.js"></script> //引入bootstrap前端框架的三个

Web 条件查询、分页查

在table表格上 创建几个按钮 1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 3 <HTML> 4 <HEAD> 5 <meta http-equiv="Content-Langu

分页 --条件查询再分页

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

linq 条件查询与分页

<div>姓名:<asp:TextBox ID="T1" runat="server"></asp:TextBox></div> <div> 性别:<asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem Text="男和女" Value="Nu

thinkphp分页+条件查询

最近项目上面有一个带条件查询的分页列表,一开始form用的post,点击第二页就没有跳转成功,原因是分页是get请求,post数据链接到其他页面就会被清除. 解决办法: 1.form表单method=get 2.后台代码用I('get.parameterName')获取URL参数(查询条件) 3.修改thinkphp3.2.3的Page类: 第47行 改为$this->parameter  = empty($parameter) ? array_urlencode($_GET) : $param

动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF 在做多条件搜索时 都有这类似的代码 这样有几个不好的地方 1.当增加查询条件,需要改代码,对应去写相应的代码. 2.对多表查询以及or的支持 不是很好.而我们很常见的需求不可能是一个表的查询 3. 这样写表示层直接出现 了SQL语句 或者 linq 的拉姆达表达式  这是很不好的 表示层不应该知道数

基于Struts2、Spring、Hibernate实现的包含多条件查询分页的基础Dao层帮助jar包实现

操作数据库常用操作就是增删查改,每做一次就写一次这些操作太麻烦,也没必要,特别是写多条件查询并分页时,太痛苦了,所以抽空写了个dao帮助jar,导入即搞定!妈妈再有不用担心我的项目了! 转载请注明出处!!! 使用说明: 1.类的使用请参照文档说明,不懂可以结合例子demo! 2.分页jsp书写,只需将分页条件包在<form action="地址" id="pageForm">中即可,然后把jar中的pageJsp中的pageView.jsp拷出来,在数据