毕业实习项目-11
资源
链接: https://pan.baidu.com/s/1PH9Lq8jlkhGAOcTLYBB24g .
提取码:wlbb
个人中心模块-信息展示
思路
前台:
- 新建一个userCenter.jsp文件来动态包含userInfo.jsp(资源已给);
- top.jsp中设置用户名链接的路径
- userCenter.jsp中修改个人信息管理标签路径
- 在userInfo.jsp中动态获取Session中的用户信息
后台:
- UserServlet
- 存request作用域(pageName,changePage)
- 请求转发 userCenter.jsp
实操
1.写 userCenter.jsp文件代码:
userCenter.jsp文件代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="css/style.css" />
<title>易买网 - ${
pageName }</title>
</head>
<body>
<!-- 头部 -->
<div id="header" class="wrap">
<jsp:include page="common/top.jsp" />
</div>
<div id="position" class="wrap">
<!-- 文字的导航 -->
您现在的位置:<a href="index">首页</a> > ${
pageName }
</div>
<div id="main" class="wrap">
<div class="lefter">
<div class="box">
<dl>
<dt>用户管理</dt>
<dd><a href="user?action=userCenter">个人信息管理</a></dd>
<dt>订单管理</dt>
<dd><a href="">个人订单管理</a></dd>
</dl>
</div>
</div>
<!-- 动态包含页面 -->
<jsp:include page="${changePage }"></jsp:include>
<div class="clear"></div>
</div>
<div id="footer">
<jsp:include page="common/footer.jsp" />
</div>
</body>
</html>
- 写 userInfo.jsp文件代码:
userInfo.jsp文件代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div class="main">
<h2>用户管理</h2>
<div class="manage">
<table class="list">
<tr>
<th>ID</th>
<th>姓名</th>
<th>性别</th>
<th>Email</th>
<th>电话号</th>
<th>操作</th>
</tr>
<tr>
<td class="first w4 c">${
user.id }</td>
<td class="w1 c">${
user.trueName }</td>
<td class="w2 c">${
user.sex }</td>
<td class="c">${
user.email }</td>
<td class="w4 c">${
user.mobile }</td>
<td class="w1 c"><a href="">修改</a></td>
</tr>
</table>
</div>
</div>
- 增加UserServlet.java文件代码
更新UserServlet.java文件代码
...
} //checkName报红按CTRL+1,创建一个方法
}else if("userCenter".equals(action)){
//个人中心
userCenter(request,response);
}else{
response.sendRedirect("index");
}
}
/**
* 个人中心
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void userCenter(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//存request作用域(pageName,changePage)
request.setAttribute("pageName", "个人中心");
request.setAttribute("changePage", "userCenter/userInfo.jsp");
//请求转发 userCenter.jsp
request.getRequestDispatcher("userCenter.jsp").forward(request, response);
}
//注册
...
结果
经过以上步骤,我们的个人信息显示小模块就完成啦,通过点击登陆的用户名就可以进入个人信息显示小模块。我用的admin账号登陆:
个人中心模块-信息修改
思路
前台:
- 新建一个userEdit.jsp文件(资源已给);
- userInfo.jsp文件中修改 ***“修改”***链接的路径(后台跳转页面)
- userEdit.jsp动态获取Session中的用户信息
- userCenter.jsp中导入一下日期控件JS,jquery
- 给更新按钮绑定更新事件
后台:
-
UserServlet
-
接受参数
-
非空判断
空 -
调用service进行更新用户信息,返回受影响行数row;
判断row是否大于0
否,提示用户更新失败 -
更新session,跳转个人中心页面
实操
- 修改userEdit.jsp文件
userEdit.jsp文件相关代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<div class="main">
<h2>修改用户</h2>
<div class="manage">
<form id="userForm" action="user?action=updateUser" method="post">
<table class="form">
<tr>
<td class="field">用户名:</td>
<td><input type="text" class="text" name="userName" value="${user.userName }" readonly="readonly" /></td>
</tr>
<tr>
<td class="field">姓名:</td>
<td><input type="text" class="text" id="trueName" name="trueName" value="${user.trueName }" /></td>
</tr>
<tr>
<td class="field">密码:</td>
<td><input type="text" class="text" id="password" name="password" value="${user.password }" /></td>
</tr>
<tr>
<td class="field">性别:</td>
<td>
<!-- 加一个条件判断 -->
<c:if test="${user.sex == '男' }">
<input type="radio" name="sex" value="男" checked/>男
<input type="radio" name="sex" value="女"/>女
</c:if>
<c:if test="${user.sex == '女' }">
<input type="radio" name="sex" value="男" />男
<input type="radio" name="sex" value="女" checked/>女
</c:if>
</td>
</tr>
<tr>
<td class="field">出生日期:</td>
<td>
<input type="text" id="birthday" name="birthday" value='<fmt:formatDate pattern="yyyy-MM-dd" value="${user.brithday }"/>' class="Wdate" onClick="WdatePicker()"/>
</td>
</tr>
<tr>
<td class="field">手机号码:</td>
<td><input type="text" id="mobile" class="text" name="mobile" value="${user.mobile }" /></td>
</tr>
<tr>
<td class="field">送货地址:</td>
<td><input type="text" class="text" id="address" name="address" value="${user.address }" /></td>
</tr>
<tr>
<td class="field">身份证号:</td>
<td><input class="text" type="text" id="dentityCode" name="dentityCode" value="${user.dentityCode }" /></td>
</tr>
<tr>
<td class="field">Email:</td>
<td><input class="text" type="text" id="email" name="email" value="${user.email }" /></td>
</tr>
<tr>
<td></td>
<td><label class="ui-blue"><input type="button" id="userBtn" value="更新" /></label></td>
</tr>
<tr>
<td> </td>
<td><font id="error" color="red">${
msg }</font> </td>
</tr>
</table>
</form>
</div>
</div>
<!-- 给更新按钮绑定更新事件 -->
<script type="text/javascript">
$("#userBtn").click(function(){
//接受参数
var password = $("#password").val();
var mobile = $("#mobile").val();
var address = $("#address").val();
$("#")
//非空判断
if(password.trim() == ""){
$("#error").html("密码不能为空!")
}
if(mobile.trim() == ""){
$("#error").html("手机号不能为空!")
}
if(address.trim() == ""){
$("#error").html("地址不能为空!")
}
//提交表单
$("#userForm").submit();
})
</script>
- userInfo.jsp文件中修改 ***“修改”***链接的路径
userInfo.jsp文件相关代码
<tr>
<td class="first w4 c">${
user.id }</td>
<td class="w1 c">${
user.trueName }</td>
<td class="w2 c">${
user.sex }</td>
<td class="c">${
user.email }</td>
<td class="w4 c">${
user.mobile }</td>
<!--修改 “修改” 链接的路径 -->
<td class="w1 c"><a href="user?action=userEdit">修改</a></td>
</tr>
</table>
</div>
</div>
- userCenter.jsp中导入一下日期控件JS,jquery
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="css/style.css" />
<!-- 导入一下日期控件JS,jquery -->
<script type="text/javascript" src="js/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
<title>易买网 - ${
pageName }</title>
</head>
<body>
- 添加UserServlet.java代码
UserServlet.java相关代码
...
else if("userCenter".equals(action)){
//个人中心
userCenter(request,response);
}else if("userEdit".equals(action)){
//修改信息页面
userEdit(request,response);
}else if("updateUser".equals(action)){
//更新用户信息
try {
updateUser(request,response);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
response.sendRedirect("index");
}
}
/**
* 更新用户信息
* @param request
* @param response
* @throws ParseException
* @throws IOException
* @throws ServletException
*/
private void updateUser(HttpServletRequest request, HttpServletResponse response) throws ParseException, ServletException, IOException {
// TODO Auto-generated method stub
//接受参数
String trueName = request.getParameter("trueName");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String birthdayStr = request.getParameter("birthday");
Date birthday = null;
if(StringUtil.isNotEmpty(birthdayStr)){
//如果用户输入了生日则格式化一下生日参数
birthday = new SimpleDateFormat("yyyy-MM-dd").parse(birthdayStr);
}
String dentityCode = request.getParameter("dentityCode");
String email = request.getParameter("email");
String mobile = request.getParameter("mobile");
String address = request.getParameter("address");
//非空判断
if(StringUtil.isEmpty(password)){
//空,提示用户
request.setAttribute("msg", "密码不能为空!");
userEdit(request,response);
return;
}
if(StringUtil.isEmpty(address)){
//空,提示用户
request.setAttribute("msg", "地址不能为空!");
userEdit(request,response);
return;
}
if(StringUtil.isEmpty(mobile)){
//空,提示用户
request.setAttribute("msg", "手机号不能为空!");
userEdit(request,response);
return;
}
User u = (User) request.getSession().getAttribute("user");
Integer id = u.getId();
//封装数据
User user = new User(id,address,birthday,dentityCode,email, mobile,password,sex,trueName);//去User.java里生成一下需要的参数构造
//调用service进行更新用户信息,返回受影响行数row;
int row = userService.updateUser(user);//生成一下updateUser方法
//判断row是否大于0
if(row <= 0){
//否,提示用户更新失败
request.setAttribute("msg", "更新失败!");
userEdit(request,response);
return;
}
//更新session,跳转个人中心页面
user.setStatus(u.getStatus());
user.setUserName(u.getUserName());
request.getSession().setAttribute("user", user);
userCenter(request,response);
}
/**
* 修改信息页面
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void userEdit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//存request作用域(pageName,changePage)
request.setAttribute("pageName", "修改当前用户");
request.setAttribute("changePage", "userCenter/userEdit.jsp");
//请求转发 userCenter.jsp
request.getRequestDispatcher("userCenter.jsp").forward(request, response);
}
...
- UserServiceImpl.java文件中添加数据库操作
UserServiceImpl.java文件相关代码
...
/**
* 调用service进行更新用户信息,返回受影响行数row;
*/
@Override
public int updateUser(User user) {
// TODO Auto-generated method stub
int row = 0;
Connection conn = null;
//异常
try{
//数据库操作
//建立连接
conn = DBUtil.getConnection();
//编写sql语句
String sql = "update t_user set address=?,birthday=?,dentityCode=?,email=?,mobile=?,password=?,sex=?,trueName=? where id = ?";
//new一个QueryRunner
QueryRunner qr = new QueryRunner();
//创建参数数组
Object[] params = {
user.getAddress(),user.getBrithday(),user.getDentityCode(),user.getEmail(),user.getMobile(),user.getPassword(),user.getSex(),user.getTrueName(),user.getId()};
//执行更新
row = qr.update(conn, sql ,params);
} catch (Exception e){
e.printStackTrace();
}finally{
//关闭连接
DBUtil.close(null, null, conn);
}
return row;
}
结果
这样,我们的信息修改模块也完成啦,通过个人信息展示页的修改按钮进入修改界面,再输入需要修改的内容,点击更新就OK了:
数据库里的内容也变啦:
个人中心模块-订单展示
思路
前台:
- 新建一个userOrder.jsp文件(资源已给)
- userCenter.jsp文件中修改个人订单管理链接路径
- userOrder.jsp文件中循环遍历显示用户订单信息
后台:
- 新建一个OrderServlet
- 从session中获取用户Id
- 调用service通过用户Id查询订单集合
- 存request作用域(订单集合,pageName,changePage)
- 请求转发跳转userCenter.jsp
实操
- userCenter.jsp文件中修改个人订单管理链接路径
userCenter.jsp文件相关代码
...
<dt>用户管理</dt>
<dd><a href="user?action=userCenter">个人信息管理</a></dd>
<-- 修改个人订单管理链接路径 -->
<dt>订单管理</dt>
<dd><a href="order?action=userOrder">个人订单管理</a></dd>
</dl>
</div>
</div>
<!-- 动态包含页面 -->
...
- userOrder.jsp文件中写代码
userOrder.jsp文件相关代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<div class="main">
<h2>订单管理</h2>
<div class="manage">
<div class="spacer"></div>
<div class="search">
<form action="" method="post">
订单查询: <input type="text" id="textSearch" name="orderNo" value="" autocomplete="off"/>
<label class="ui-blue"><input type="submit" name="submit" value="查询"/></label>
</form>
</div>
<table class="list">
<!--循环遍历显示用户订单信息 -->
<c:forEach items="${orderList }" var="order">
<tr style="background-color:#F7F4EB">
<td colspan="4">
单号:${
order.orderNo }
下单时间:<fmt:formatDate value="${order.createTime }" pattern="yyyy-MM-dd"/>
状态:<!-- 1待审核 2待发货 3确认收货 4交易完毕 -->
<c:choose>
<c:when test="${order.status == 1 }">
待审核
</c:when>
<c:when test="${order.status == 2 }">
待发货
</c:when>
<c:when test="${order.status == 3 }">
<input type="button" class="ui-blue" value="确认收货" onclick="confirmReceive()"/>
</c:when>
<c:when test="${order.status == 4 }">
交易完毕
</c:when>
</c:choose>
金额:${
order.cost } (元)
</td>
</tr>
<!--嵌套循环显示商品信息 -->
<c:forEach items="${order.orderProductList }" var="orderProduct">
<tr>
<td width="55%">
<a href="product?id=${orderProduct.productId }">
<img src="${orderProduct.product.proPic }" width="70" height="70" />
</a>
<a href="${orderProduct.productId }">
${
orderProduct.product.name }
</a>
</td>
<td width="15%">
${
orderProduct.product.price }(元)
</td>
<td width="15%">
${
orderProduct.num }
</td>
<td width="15%">
小计:
${
orderProduct.num*orderProduct.product.price } (元)
</td>
</tr>
</c:forEach>
</c:forEach>
</table>
</div>
</div>
<script type="text/javascript">
function confirmReceive(){
if(confirm("确定收货?")){
window.location.reload();
}
}
</script>
- OrderServlet.java文件中添加代码
OrderServlet.java文件代码
...
/**
* 订单
* Servlet implementation class OrderServlet
*/
@WebServlet("/order")
public class OrderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//OrderService生成一个接口放在Service包下;OrderServiceImpl生成一个类放在impl包下
private OrderService orderService = new OrderServiceImpl();
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String action = request.getParameter("action");
if("userOrder".equals(action)){
//个人订单展示
userOrder(request,response);
}
}
/**
* 个人订单展示
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void userOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//从session中获取用户Id
User user = (User) request.getSession().getAttribute("user");
Integer userId = user.getId();
//调用service通过用户Id查询订单集合
List<Order> orderList = orderService.findOrderListByUserId(userId);//Order报红新建一个Order.java文件在po包下作为OrderBean
//存request作用域(订单集合,pageName,changePage)
request.setAttribute("orderList", orderList);
request.setAttribute("pageName", "个人中心");
request.setAttribute("changePage", "userCenter/userOrder.jsp");
//请求转发跳转userCenter.jsp
request.getRequestDispatcher("userCenter.jsp").forward(request, response);
}
}
- Order.java文件添加代码
Order.java文件代码
...
/**
* 订单Bean
* @author yu
*
*/
public class Order {
private Integer id; //主键Id
private float cost; //订单总价
private Date createTime; //创建时间
private String orderNo; //订单编号
private Integer status; //订单状态 1:待审核 2:待发货 3:确认收获 4:交易完毕
private Integer userId; //用户Id
private List<OrderProduct> orderProductList;
//敲完以上三行代码可以使用ALT+SHIFT+S组合键;
//选择Generate Getters and Setters...
//选择Select all;ok后即可自动生成下面的Get、Set方法代码
public List<OrderProduct> getOrderProductList() {
return orderProductList;
}
public void setOrderProductList(List<OrderProduct> orderProductList) {
this.orderProductList = orderProductList;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public float getCost() {
return cost;
}
public void setCost(float cost) {
this.cost = cost;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
}
- OrderServiceImpl.java文件中添加代码
OrderServiceImpl.java文件代码
...
public class OrderServiceImpl implements OrderService {
//OrderProductService生成一个接口放在Service包下;OrderProductServiceImpl生成一个类放在impl包下
private OrderProductService orderProductService = new OrderProductServiceImpl();
/**
* 调用service通过用户Id查询订单集合
*/
@Override
public List<Order> findOrderListByUserId(Integer userId) {
// TODO Auto-generated method stub
//new一个list
List<Order> orderList = null;
Connection conn = null;
//异常
try{
//数据库操作
//建立连接
conn = DBUtil.getConnection();
//编写sql语句
String sql = "select * from t_order where userId = ?";
//new一个QueryRunner
QueryRunner qr = new QueryRunner();
Object[] params = {
userId};
//执行查询,得到商品集合,再放入orderList中
orderList = qr.query(conn, sql ,new BeanListHandler<>(Order.class),params);
//通过orderId查询orderList集合
for (Order order : orderList) {
//生成一下OrderProduct类作为OrderProductBean放在po包下;生成一下findOrderProductListByOrderId方法
List<OrderProduct> orderProductList = orderProductService.findOrderProductListByOrderId(order.getId());
order.setOrderProductList(orderProductList);
}
} catch (Exception e){
e.printStackTrace();
}finally{
//关闭连接
DBUtil.close(null, null, conn);
}
return orderList;
}
}
...
- OrderProduct.java文件中添加代码
OrderProduct.java文件代码
...
/**
* 订单商品Bean
* @author yu
*
*/
public class OrderProduct {
private Integer id; //主键Id
private Integer num; //订单对应的商品数量
private Integer orderId; //订单Id
private Integer productId; //商品Id
private Product product;
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
}
...
- OrderProductServiceImpl.java文件修改代码
OrderProductServiceImpl.java文件代码
...
public class OrderProductServiceImpl implements OrderProductService {
private ProductService productService = new ProductServiceImpl();
/**
*
*/
@Override
public List<OrderProduct> findOrderProductListByOrderId(Integer orderId) {
// TODO Auto-generated method stub
//new一个list
List<OrderProduct> orderProductList = null;
Connection conn = null;
//异常
try{
//数据库操作
//建立连接
conn = DBUtil.getConnection();
//编写sql语句
String sql = "select * from t_order_product where orderId = ?";
//new一个QueryRunner
QueryRunner qr = new QueryRunner();
Object[] params = {
orderId};
//执行查询,得到商品集合,再放入orderList中
orderProductList = qr.query(conn, sql ,new BeanListHandler<>(OrderProduct.class),params);
//通过productId查询Product
for (OrderProduct orderProduct : orderProductList) {
Product product= productService.findProductById(orderProduct.getProductId());
orderProduct.setProduct(product);
}
} catch (Exception e){
e.printStackTrace();
}finally{
//关闭连接
DBUtil.close(null, null, conn);
}
return orderProductList;
}
}
...
结果
经过以上步骤,这个小模块也就完成啦,因为涉及到表的连查,所以这个模块涉及的文件和代码相较其它模块多一些。成功的数据依旧是来源于数据库admin用户的个人订单:
个人中心模块-确认收货&订单查询
思路
前台:
一、确认收获:
- userOrder.jsp文件中给确认收货按钮绑定点击事件(传入订单ID)
- Ajax访问后台,返回结果给回调函数
- 判断结果,1:刷新页面;0:提示用户失败
二、订单搜索
- userOrder.jsp文件中设置表单提交路径
后台:
一、确认收获:
- OrderServlet
- 接收参数
- 调用service通过Id修改订单状态,返回受影响行数row
row <=0 返回0 否则 返回1
二、订单搜索:
- 接收参数
- 非空判断
空,查询所有
不为空,调用service通过订单编号模糊查询订单集合
非空判断
空,提示用户没有记录 - 存作用域(订单集合,pageName,changePage)
- 请求转发跳转userCenter.jsp
实操
- userOrder.jsp文件修改代码
userOrder.jsp文件代码
...
<h2>订单管理</h2>
<div class="manage">
<div class="spacer"></div>
<div class="search">
<!--订单查询 设置表单提交路径 -->
<form action="order?action=searchOrderNo" method="post">
订单查询: <input type="text" id="textSearch" name="orderNo" value="${msg }" autocomplete="off"/>
<label class="ui-blue"><input type="submit" name="submit" value="查询"/></label>
</form>
</div>
<table class="list">
...
...
...
<c:when test="${order.status == 2 }">
待发货
</c:when>
<c:when test="${order.status == 3 }">
<-- 确认收货按钮绑定点击事件 -->
<input type="button" class="ui-blue" value="确认收货" onclick="confirmReceive(${order.id })"/>
</c:when>
<c:when test="${order.status == 4 }">
交易完毕
</c:when>
...
...
...
<td width="15%">
小计:
${
orderProduct.num*orderProduct.product.price } (元)
</td>
</tr>
</c:forEach>
</c:forEach>
</table>
</div>
</div>
<script type="text/javascript">
function confirmReceive(orderId){
if(confirm("确定收货?")){
//Ajax访问后台,返回结果给回调函数
$.ajax({
type:"post",
url:"order",
data:{
"action":"confirmReceive",
"orderId":orderId
},
success:function(result){
if(result == 0){
alert("网络异常!");
}else{
window.location.reload();
}
}
});
}
}
</script>
...
- OrderServlet.java文件修改代码
OrderServlet.java文件代码
...
}else if("confirmReceive".equals(action)){
//确认收货
confirmReceive(request,response);
}else if("searchOrderNo".equals(action)){
//订单查询
searchOrderNo(request,response);
}
}
/**
* 订单查询:
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void searchOrderNo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//接收参数
String orderNo = request.getParameter("orderNo");
//非空判断
if(StringUtil.isEmpty(orderNo)){
//空,查询所有
userOrder(request,response);
}
User user = (User) request.getSession().getAttribute("user");
//不为空,调用service通过订单编号模糊查询订单集合
List<Order> list = orderService.findOrderListByOrderNo(orderNo,user.getId());
//非空判断
if(list == null){
//空,提示用户没有记录
request.setAttribute("msg", "暂未查询到订单");
}
//存作用域(订单集合,pageName,changePage)
request.setAttribute("orderList", list);
request.setAttribute("pageName", "个人中心");
request.setAttribute("changePage", "userCenter/userOrder.jsp");
//请求转发跳转userCenter.jsp
request.getRequestDispatcher("userCenter.jsp").forward(request, response);
}
/**
* 确认收货
* @param request
* @param response
* @throws IOException
*/
private void confirmReceive(HttpServletRequest request, HttpServletResponse response) throws IOException {
// TODO Auto-generated method stub
//接收参数 id
String orderId = request.getParameter("orderId");
if(StringUtil.isEmpty(orderId)){
response.getWriter().write("0");
return;
}
//调用service通过Id修改订单状态,返回受影响行数row
int row = orderService.confirmReceive(Integer.parseInt(orderId));
//row <=0 返回0
if(row <= 0){
response.getWriter().write("0");
return;
}
//否则 返回1
response.getWriter().write("1");
}
...
- OrderServiceImpl.java文件修改代码
OrderServiceImpl.java文件代码
...
/**
* 通过Id修改订单状态
*/
@Override
public int confirmReceive(int orderId) {
// TODO Auto-generated method stub
int row = 0;
Connection conn = null;
//异常
try{
//数据库操作
//建立连接
conn = DBUtil.getConnection();
//编写sql语句
String sql = "update t_order set status = 4 where id = ?";
//new一个QueryRunner
QueryRunner qr = new QueryRunner();
//创建参数数组
Object[] params = {
orderId};
//执行更新
row = qr.update(conn, sql ,params);
} catch (Exception e){
e.printStackTrace();
}finally{
//关闭连接
DBUtil.close(null, null, conn);
}
return row;
}
/**
* 通过订单编号模糊查询订单集合
*/
@Override
public List<Order> findOrderListByOrderNo(String orderNo, Integer userId) {
// TODO Auto-generated method stub
//new一个list
List<Order> orderList = null;
Connection conn = null;
//异常
try{
//数据库操作
//建立连接
conn = DBUtil.getConnection();
//编写sql语句
String sql = "select * from t_order where userId = ? and orderNo like ?";
//new一个QueryRunner
QueryRunner qr = new QueryRunner();
Object[] params = {
userId,"%"+orderNo+"%"};
//执行查询,得到商品集合,再放入orderList中
orderList = qr.query(conn, sql ,new BeanListHandler<>(Order.class),params);
//通过orderId查询orderList集合
for (Order order : orderList) {
//生成一下OrderProduct类作为OrderProductBean放在po包下;生成一下findOrderProductListByOrderId方法
List<OrderProduct> orderProductList = orderProductService.findOrderProductListByOrderId(order.getId());
order.setOrderProductList(orderProductList);
}
} catch (Exception e){
e.printStackTrace();
}finally{
//关闭连接
DBUtil.close(null, null, conn);
}
return orderList;
}
结果
做完了这个小模块,个人中心大模块就做完了,贴出成功图:
第一个和第二个商品点击确认收货:
第一个和第二个商品状态变化:
数据库红框内有两条目状态变为4(点击确认收货后交易完成)
栏内搜索第一个订单的单号后四位5348,只显示第一条订单: