Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)

Java Web 网络商城案例演示十五 订单详情功能(提交订单支付界面)订单详情功能(提交订单支付界面)原理分析步骤实现:1、准备工作:order_list.jsp当中修改链接提交当前订单编号<ahref=”${pageContext.request.contextPath}/OrderServlet?method=findOrderByOid&oid=${o.oid}”>付款</a>2、OrderServlet…

大家好,又见面了,我是你们的朋友全栈君。

订单详情功能(提交订单支付界面)

原理分析

在这里插入图片描述

步骤实现:

1、准备工作:order_list.jsp当中修改链接

提交当前订单编号

<a href="${pageContext.request.contextPath}/OrderServlet?method=findOrderByOid&oid=${o.oid}">付款</a>

在这里插入图片描述

2、OrderServlet —> findOrderByOid

获取订单的oid
调用业务层功能;根据订单编号查询订单信息
将订单放入request当中
转发到/jsp/order_info.jsp

OrderServlet当中实现该方法

// findOrderByOid
	public String findOrderByOid(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException, SQLException { 
   
		//获取对应订单的oid
		String oid = request.getParameter("oid");
		//调用业务层功能:根据订单编号查询订单信息
		
		OrderService orderService = new OrderServiceImpl();
		Order order = null;
		try { 
   
			order = orderService.findOrderByOid(oid);
		} catch (Exception e) { 
   
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//将订单放入到request当中
		request.setAttribute("order", order);
		//转发到/jsp/order_info.jsp
		return "/jsp/order_info.jsp";
	}

3、OrderService<->OrderServiceImpl

OrderService

Order findOrderByOid(String oid)throws Exception;

OrderServiceImpl

@Override
	public Order findOrderByOid(String oid) throws Exception { 
   	
		OrderDao orderDao = new OrderDaoImpl();	
		return orderDao.findOrderByOid(oid);
	}

4、OrderDao<->OrderDaoImpl

OrderDao

Order findOrderByOid(String oid)throws Exception;

OrderDaoImpl
根据订单oid查询订单下所有的订单项以及订单项关联的商品

@Override
public Order findOrderByOid(String oid) throws Exception { 

// 根据订单oid查询订单以及对应的订单项,返回订单,其订单包括订单以及订单项的集合
String sql = "select * from orders where oid = ?";
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
Order order = qr.query(sql, new BeanHandler<Order>(Order.class), oid);
// 根据订单的id 查询订单下所有订单项以及所有的订单对应的商品信息
sql = "select * from orderitem o,product p where o.pid=o.pid where and oid = ?";
List<Map<String, Object>> list02 = qr.query(sql, new MapListHandler(), oid);// 获取到的是笛卡尔集的所有对应的商品集合
// 遍历list集合
for (Map<String, Object> map : list02) { 

// 实例化
OrderItem orderItem = new OrderItem();
Product product = new Product();
// 由于BeanUtlis将字符串“1992-3-3”向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器
// 1、创建时间类型的转换器
DateConverter dt = new DateConverter();
// 2、设置转换的格式
dt.setPattern("yyyy-MM-dd");
// 3、注册转换器
ConvertUtils.register(dt, Date.class);// 将Date对象设置为dt当中的格式
try { 

// 将map中属于orderItem的数据自动填充到orderItem对象上
BeanUtils.populate(orderItem, map);
// 将map中属于product的数据自动填充到product对象上
BeanUtils.populate(product, map);
// 让每一个订单项和商品项发生关系
orderItem.setProduct(product);// 将商品项当中的内容放到订单项当中
order.getList().add(orderItem);// 将订单项放到订单当中的list集合当中
} catch (IllegalAccessException e) { 

// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) { 

// TODO Auto-generated catch block
e.printStackTrace();
}
}
return order;
}

在这里插入图片描述
在这里插入图片描述
5、/jsp/order_info.jsp
开发中:多个功能对应同一个jsp页面,为了提供代码的复用率,所有的功能在向同一个jsp页面转发的时候,向request当中存入相同的数据(属性名一致)request.setAttribute(name,obj);

<%@ 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 charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>下订单</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.min.css" type="text/css" />
<script src="${pageContext.request.contextPath}/js/jquery-1.11.3.min.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/js/bootstrap.min.js" type="text/javascript"></script>
<!-- 引入自定义css文件 style.css -->
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css"/>
<style>
body { 

margin-top: 20px;
margin: 0 auto;
}
.carousel-inner .item img { 

width: 100%;
height: 300px;
}
</style>
</head>
<body>	
<!--
描述:菜单栏
-->
<%@include file="/jsp/header.jsp" %>
<div class="container">
<div class="row">
<div style="margin:0 auto;margin-top:10px;width:950px;">
<strong>订单详情</strong>
<table class="table table-bordered">
<tbody>
<tr class="warning">
<th colspan="5">订单编号:${ 
order.oid } </th>
</tr>
<tr class="warning">
<th>图片</th>
<th>商品</th>
<th>价格</th>
<th>数量</th>
<th>小计</th>
</tr>
<c:forEach items="${order.list }" var="item">
<tr class="active">
<td width="60" width="40%">
<input type="hidden" name="id" value="22">
<img src="${pageContext.request.contextPath}/${item.product.pimage}" width="70" height="60">
</td>
<td width="30%">
<a target="_blank">${ 
item.product.pname}</a>
</td>
<td width="20%">
${ 
item.product.shop_price}
</td>
<td width="10%">
${ 
item.quantity}
</td>
<td width="15%">
<span class="subtotal">${ 
item.total}</span>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<div style="text-align:right;margin-right:120px;">
商品金额: <strong style="color:#ff6600;">¥${ 
order.total }</strong>
</div>
</div>
<div>
<hr/>
<form class="form-horizontal" style="margin-top:5px;margin-left:150px;">
<div class="form-group">
<label for="username" class="col-sm-1 control-label">地址</label>
<div class="col-sm-5">
<input type="text" class="form-control" id="username" placeholder="请输入收货地址">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-1 control-label">收货人</label>
<div class="col-sm-5">
<input type="password" class="form-control" id="inputPassword3" placeholder="请输收货人">
</div>
</div>
<div class="form-group">
<label for="confirmpwd" class="col-sm-1 control-label">电话</label>
<div class="col-sm-5">
<input type="password" class="form-control" id="confirmpwd" placeholder="请输入联系方式">
</div>
</div>
</form>
<hr/>
<div style="margin-top:5px;margin-left:150px;">
<strong>选择银行:</strong>
<p>
<br/>
<input type="radio" name="pd_FrpId" value="ICBC-NET-B2C" checked="checked" />工商银行
<img src="${pageContext.request.contextPath}/img/bank_img/icbc.bmp" align="middle" />&nbsp;&nbsp;&nbsp;&nbsp;
<input type="radio" name="pd_FrpId" value="BOC-NET-B2C" />中国银行
<img src="${pageContext.request.contextPath}/img/bank_img/bc.bmp" align="middle" />&nbsp;&nbsp;&nbsp;&nbsp;
<input type="radio" name="pd_FrpId" value="ABC-NET-B2C" />农业银行
<img src="${pageContext.request.contextPath}/img/bank_img/abc.bmp" align="middle" />
<br/>
<br/>
<input type="radio" name="pd_FrpId" value="BOCO-NET-B2C" />交通银行
<img src="${pageContext.request.contextPath}/img/bank_img/bcc.bmp" align="middle" />&nbsp;&nbsp;&nbsp;&nbsp;
<input type="radio" name="pd_FrpId" value="PINGANBANK-NET" />平安银行
<img src="${pageContext.request.contextPath}/img/bank_img/pingan.bmp" align="middle" />&nbsp;&nbsp;&nbsp;&nbsp;
<input type="radio" name="pd_FrpId" value="CCB-NET-B2C" />建设银行
<img src="${pageContext.request.contextPath}/img/bank_img/ccb.bmp" align="middle" />
<br/>
<br/>
<input type="radio" name="pd_FrpId" value="CEB-NET-B2C" />光大银行
<img src="${pageContext.request.contextPath}/img/bank_img/guangda.bmp" align="middle" />&nbsp;&nbsp;&nbsp;&nbsp;
<input type="radio" name="pd_FrpId" value="CMBCHINA-NET-B2C" />招商银行
<img src="${pageContext.request.contextPath}/img/bank_img/cmb.bmp" align="middle" />
</p>
<hr/>
<p style="text-align:right;margin-right:100px;">
<a href="javascript:document.getElementById('orderForm').submit();">
<img src="${pageContext.request.contextPath}/img/finalbutton.gif" width="204" height="51" border="0" />
</a>
</p>
<hr/>
</div>
</div>
</div>
<%@include file="footer.jsp" %> 
</body>
</html>

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140768.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 怎么完全卸载赛门铁克_赛门铁克(sep)卸载方法

    怎么完全卸载赛门铁克_赛门铁克(sep)卸载方法卸载SEP(symantecendpointprotection),需要密码怎么办2011年12月08日下午1:50默认密码是symantec,或者Symantec1.点击“开始”->运行(或直接:Window徽标键+R)2.输入smc-stop终止SEP。如果跳出输入密码提示,则打开注册表(Window徽标键+R;输入regedit;敲回车),然后找到HKEY_LOCAL_MAC…

  • torch.zeros() 函数详解

    torch.zeros() 函数详解torch.zeros()函数返回一个形状为为size,类型为torch.dtype,里面的每一个值都是0的tensortorch.zeros(*size,out=None,dtype=None,layout=torch.strided,device=None,requires_grad=False)→Tensor测试一下:>>>x=torch.zeros([2,5],dtype=torch.float)>>>xtensor([[0

  • GT911单片机驱动程序[通俗易懂]

    GT911单片机驱动程序[通俗易懂]GT911手册及驱动程序(安卓、MTK).rar-嵌入式文档类资源-CSDN下载https://download.csdn.net/download/qasxc78563/15117948参考:STM32F103驱动GT911-DarkBright-博客园https://www.cnblogs.com/DarkBright/p/10730346.htmlGT911与主机接口共有6PIN,分别为:VDD、GND、SCL、SDA、INT、RESET。这里用P11做中断脚,P13做复位

  • rsync自动同步_文件实时同步

    rsync自动同步_文件实时同步文章目录一、rsync同步简介1.关于rsync2.rsync同步源(备份源)二、配置rsync备份源1.关闭防火墙2.查看rsync是否已安装,一般系统已默认安装rsync3.建立/etc/rsync.conf配置文件4.为备份账户创建数据文件5.保证所有用户对源目录/var/www/html都有读取权限6.启动rsync服务程序7.关闭rsync服务8.编写测试网页三、rsync命令基本用法1.基本格式2.常用选项四、配置发起端1.关闭防火墙2.查看rsync是否已安装,一般

    2022年10月13日
  • vue生成二维码带描述_logo二维码生成器

    vue生成二维码带描述_logo二维码生成器yarnaddvue-qr详细配置可访问vue-qr-npmhttps://www.npmjs.com/package/vue-qr<template><vue-qr:logoSrc=”logoSrc”:text=”codeUrl”:size=”95″:logoScale=”0.3″:callback=”getCodeUrl”:margin=”5″:logoCornerRadius=”0″:correctLevel=”3″>&lt…

  • Laravel 队列发送邮件

    Laravel 队列发送邮件

    2021年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号