商品列表页面如下:
哀求:
1.在表头上添加一个复选框.(列表全选或者全不选)
2.在list.jsp中添加一个删除选中的按钮,点击删除选中商品
2. 删除选中实现
全选或者全不选的实现
在表头上添加一个复选框
遍历商品的时候给每一个商品添加一个复选框,为了便于获取,给他们利用了name属性
编写js函数实现全选或者全不选
删除选中记录的实现
获取选中的记录,将选中的ids通报给DeleteProductByIdsServlet
为了方便获取选中记录的id,在复选框上添加value属性,值为当前记录的id
在点击删除选中按钮的时候,获取所有选中记录的id,通报到后台
实现办法两种:
办法1:手动拼url,在后台获取id参数
办法2:通过form表单,在后天获取name=’ck’的参数
将图书列表的tr放到一个form表单中,当点击’删除选中’,触发当前表单提交
DeleteProductByIdsServlet调用service,service调用dao,在到里实行批量操作
dao里的写法
3. 多条件查询商品剖析
4. 多条件查询商品实现
dao条件查询写法
二.分页
1. 分页事理先容
分页先容
分页便是将数据以多页展示出来
分页浸染
为了提高用户的感想熏染
分页技能分类
物理分页
只从数据库中查询出要显示的数据
优点:不占用很多内存
缺陷:速率比较低,每一次都要从数据库中获取
逻辑分页
从数据库中将所有记录查找到,存储到内存中,须要什么数据
直接从内存中获取.
优点:速率比较快
缺陷:占用比较多的内存,如果数据比较多,可以涌现内在溢出。
数据实时更新须要单独处理.
mysql中limit先容
利用mysql的limit,进行物理分页。
格式1:
select from 表名 limit m,n;
m是从0开始,代表是第几条记录
n代表显示多少条记录
可以理解从第m+1条记录到m+n条记录 闭合区间[m+1,m+n]
格式2:
select from 表名 limit n;
可以理解为前n条记录
等价于:select from 表名 limit 0,n;
例如
select from person limit 4,10;
从第5条记录开始,显示10条.也便是[5,14]
分页实现事理剖析
a.明确一共多少条记录
select coun() from 表;
b.明确每一页显示多少条记录
自己定义或者从前台传过来
c.打算一共多少页
打算办法1:总条数%每页条数==0?总条数/每页条数:总条数/每页条数+1
打算办法2:Math.ceil(总条数1.0/每页条数)
d.查看第几页
默认第一页,从前台页面传过来
点击上一页下一页的时候,便是对当前页加或者减1操作
e.当前页码的数据
通过limit查询出数据
例如:每页显示5条,查询第3页数据
select from 表 limit (3-1)5,5;
用(当前页码-1)每页条数,就求出了开始的记录位置,在向下查找每页数个记录。就得到了这页的数据.
2. 分页功能剖析
实行流程:
a从index.jsp链接进入商品列表页面,默认访问第一页的数据,
b.发送至findProductsByPageServlet查询第一页数据,每页的条数默认为4条,
须要两个参数:当前页页码和每页显示的条数
c.调用productService的findProductsByPage(int 当前页,int 每页条数),返回值为bean工具.将当前页码,每页条数,总条数,总页数以及当前页的图书列表封装成pageBean,
d.将pagebean放到request域中,返回给product_list.jsp
e.在jsp页面将数据遍历
3. 分页功能实现
编写PageBean
private Integer currentPage;//当前页码
private Integer pageSize;//每页条数
private Integer totalPage;//总页数
private Integer totalCount;//总条数
private List<Product> list;//每页数据
编写servlet(分页查找)
编写productService中的分页查找方法,将查找出数据进行封装成pagebean
public PageBean findProductsByPage(int currentPage, int pageSize) throws SQLException {
//查找总条数
int totalCount=dao.getTotalCount();
//打算总页数
int totalPage=(int) Math.ceil(totalCount1.0/pageSize);
//查询当前页数据
List<Product> list=dao.findProductsByPage(currentPage,pageSize);
//封装数据
PageBean bean=new PageBean(currentPage, pageSize, totalPage, totalCount, list);
return bean;
}
编写productDao中的方法
查看总条数
public int getTotalCount() throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDateSource());
String sql=\公众select count() from products\"大众;
return ((Long) runner.query(sql, new ScalarHandler())).intValue();
}
查看当前页数据
public List<Product> findProductsByPage(int currentPage, int pageSize) throws SQLException {
QueryRunner runner = new QueryRunner(DataSourceUtils.getDateSource());
String sql=\"大众select from products limit ?,?\"大众;
return runner.query(sql, new BeanListHandler<Product>(Product.class), (currentPage-1)pageSize,pageSize);
}
4. 设置分页条码
<c:if test=\"大众${pb.currentPage==1 }\"大众>
<li><<上一页</li>
</c:if>
<c:if test=\"大众${pb.currentPage!=1 }\"大众>
<li><a href=\"大众${pageContext.request.contextPath }/findProductsByPage?page=${pb.currentPage-1}\"大众><<上一页</a></li>
</c:if>
<c:forEach begin=\公众1\公众 end=\公众${pb.totalPage }\公众 step=\公众1\"大众 var=\"大众n\公众>
<c:if test=\"大众${n == pb.currentPage}\公众>
<li>${n }</li>
</c:if>
<c:if test=\"大众${n != pb.currentPage}\"大众>
<li><a href=\"大众${pageContext.request.contextPath }/findProductsByPage?page=${n}\"大众>${n }</a></li>
</c:if>
</c:forEach>
<c:if test=\"大众${pb.currentPage==pb.totalPage }\公众>
<li>下一页>></li>
</c:if>
<c:if test=\"大众${pb.currentPage!=pb.totalPage }\公众>
<li><a href=\"大众${pageContext.request.contextPath }/findProductsByPage?page=${pb.currentPage+1}\"大众>下一页>></a></li>
</c:if>
请点击此处输入图片描述
三.案例1. 显示商品详情剖析
2. 显示商品详情实现
页面:product_info.jsp
3. 将商品添加到购物车剖析
在商品详情页面点击购买,将该商品添加到购物车.
购物车存放在哪儿?
session
购物车的数据构造是什么?
Map<Product,Integer>
如何担保购物车里物品的唯一性?
重写key的equals和hashcode方法
也便是说重写product的两个方法.(只须要判断id即可)
4. 将商品添加到购物车实现
修正product_info.jsp的”购买”链接
在add2cartServlet中将商品添加到购物车即可
5. 显示购物车中的商品信息剖析
直接点击页面右上部的购物车即可,购物车的页面如下:
6. 显示购物车中的商品信息实现
只须要在页面中将购物车中的数据展示出来即可
遍历map
7. 修正购物车中商品数量剖析
页面删有三个按钮,分别是添加一个,减少一个以及从购物车移除该商品
请点击此处输入图片描述请点击此处输入图片描述
添加的时候:
1.须要知道对那个商品就行操作的,并且个数是多少,因此在触发按钮的时候须要将id和个数传过去
2.修正的个数大于库存了或者小于0如何做?
思路:
须要在点击按钮的时候,将商品的库存数量一并传过去
当购买数量<=0时从购物车移走
当透明数量>=库存时,设成最大值
8. 修正购物车中商品数量实现
jsp页面的修正
a.在按钮上添加单击事宜,将当前商品的id,count以及库存传过去
b.在js中止定数量>库存或者<=0时的操作
c.在点击删除按钮的时候,将数量置为0即可
修正项目名称
更多精彩资源与分享,欢迎关注【Java帮帮】微信"大众年夜众号与【Java帮帮】QQ空间