从订单信息页面进入订单详细商品页面,最简单的MVC思想
前言
习惯上图,看流程图把,下面是具体实现以后的一个流程图。
步骤-
(1)点击订单详情,进入订单详情列表,展示订单的一下基本信息,在上图框内,可随机输入查询信息,查询具体订单信息。
(2)点击订单商品详情,进入具体订单,图中进入订单编号1的商品页面,可以看到具体商品信息,从数据库我们建立一张表,关联订单跟具体商品的关系。
正文
直接上代码吧,简单粗暴,因为之前有朋友需要具体实现,我会把最重要的放在这里,因为篇幅,所以一些不太重要的就不放了,下面是OrderDaoImpl.java的具体代码,这三个方法具体就涉及到了上图三个页面的跳转。
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import com.shao.Util.C3P0Util;
import com.shao.dao.OrderDao;
import com.shao.pojo.Order;
public class OrderDaoImpl implements OrderDao {
@Override
public List<Order> selectOrders() throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select * from orders";
return qr.query(sql, new BeanListHandler<Order>(Order.class));
}
@Override
public List<Object> selectItemsById(int order_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select item_id from ord_item where order_id = ?";
return qr.query(sql, new ColumnListHandler(1), order_id);
}
@Override
public List<Order> selectByCondition(String id, String shop_id, String user_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select * from orders where 1=1 ";
List list = new ArrayList();
if(!"".equals(id.trim())){
int iid = Integer.parseInt(id.trim());
sql+=" and id =?"; // 不能在这写% %'1002'%
list.add(iid);// '%1002%'
}
if(!"".equals(shop_id.trim())){
int sid = Integer.parseInt(shop_id.trim());
sql+=" and shop_id=?";
list.add(sid);
}
if(!"".equals(user_id.trim())){
int uid = Integer.parseInt(user_id.trim());
sql+=" and user_id = ?";
list.add(uid);
}
return qr.query(sql, new BeanListHandler<Order>(Order.class), list.toArray());
}
}
(1)public List<Order> selectOrders() 该方法主要是实现对所有订单的查询,这个应该没有难度。
(2)public List<Object> selectItemsById(int order_id) 该方法具体涉及到根据订单编号,寻找商品编号,然后我们再根据商品编号,寻找具体商品信息。寻找具体商品信息我写在ItemDaoImpl.java里面了。
public Item selectItemById(int id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select * from item where id = ?";
return qr.query(sql, new BeanHandler<Item>(Item.class), id);
}
(3) public List<Order> selectByCondition(String id, String shop_id, String user_id)该方法主要就是通过输入条件,进一步对订单筛选,这样我们可以快速定位到我们需要的订单信息。
问题
其实上面的都应该好处理,在这里,我遇到了一个问题,主要在于具体商品商品信息的处理,怎么才能通过上面的轮转跳到具体商品信息呢,在这里我后来用这样的方法处理出来了!
上面是订单详情的事件处理,/servlet/FindItemsByOrderServlet?order_id=${o.id },通过把order_id的编号传给这个servlet来处理,具体FindItemsByOrderServlet代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
int order_id =Integer.parseInt(request.getParameter("order_id")) ;//获取order_id的参数并且转化成int类型
System.out.println("order_id = "+order_id);
OrderService os = new OrderServiceImpl();
ItemService is = new ItemServiceImpl();
List<Object> list = new ArrayList<>();
list= os.selectItemsById(order_id); //根据order_id找到对应的Item_id的集合,并放在list中
System.out.println(list.toString());
List<Item> itemList = new ArrayList<Item>();
for(int i=0;i<list.size();i++){
itemList.add(is.selectItemById((int)list.get(i))); //遍历list,根据商品编号找到具体的商品信息放在JavaBen(Item),然后存入itemList
}
request.getSession().setAttribute("item", itemList);
System.out.println("找到订单对应的商品信息!");
request.getRequestDispatcher("/admin/myhome/ord_itemlist.jsp").forward(request, response);
}
可以看到具体输出,我们通过得到订单编号1,查到在订单编号里面有2件商品,商品编号为2,3,然后放在List里面,最后遍历list 得到具体商品的信息,显示在页面中。
问题
还有一个问题,之前写完以后,发现List一直为空,没有取到2,3的商品编号,然后我就定义到下面的数据库语句:
@Override
public List<Integer> selectItemsById(int order_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select item_id from ord_item where order_id = ?";
return qr.query(sql, new BeanListHandler<Integer>(Integer.class), order_id);
}
select item_id from ord_item where order_id = 1,通过运行这句话得到上面的结果,语句是对的,但是却一直说List 是空,那么我的问题就出在return qr.query(sql, new BeanListHandler<Integer>(Integer.class), order_id);后来查询了资料,BeanListHandler主要是存储对象的集合,而我这里只有一列值,但是我不知道为什么存储值就不行?所以我就继续找,一列数据采用的是ColumnListHandler,于是我改成了new ColumnListHandler<Integer>(),然后eclipse开始报错The type ColumnListHandler is not generic; it cannot be parameterized with arguments <Integer>告诉我,里面是不能存Integer,不支持,里面还是只能放Object,最后就继续改,写成了下面这样:
@Override
public List<Object> selectItemsById(int order_id) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr = new QueryRunner(C3P0Util.getDataSource());
String sql =" select item_id from ord_item where order_id = ?";
return qr.query(sql, new ColumnListHandler(1), order_id);
}
最后,控制器哪里也要处理,所以在servlet里面我们看到这样一句话:
for(int i=0;i<list.size();i++){
itemList.add(is.selectItemById((int)list.get(i))); //遍历list,根据商品编号找到具体的商品信息放在JavaBen(Item),然后存入itemList
}
我把(int)list.get(i)强制转化成Int类型,因为is.selectItemById(int shop_id);里面定义的Int 类型,到此就结束了,list里面终于出现了我预期的【2,3】集合。
问题就是这么让你意想不到,不过现在遇到问题我也不急了,主要就是一定要看错误,然后定义到具体位置,最怕就是显示台什么也不报错,我也出现了,于是我就重启服务器,然后显示台就会把错误显示出来,我们然后根据提示大概定义到错误的地方,我们可以采用我里面的System.out.print()去尝试输出,也可以Debug来一步步看,这样我们就可以快速定位问题,多做多调试,其实编程也可以很快乐,那种一点点的成就感!喜欢的可以关注,有问题,或者对上面的解决方案你有更好的,欢迎探讨,谢谢!
从订单信息页面进入订单详细商品页面,最简单的MVC思想相关推荐
- 采购订单增强(根据公司代码、采购订单类型等相关订单信息给采购订单税码设置默认值)
根据公司代码.采购订单类型等相关订单信息给采购订单税码设置默认值: 使用BADI及方法: BADI : ME_PROCESS_PO_CUST Method: PROCESS_ITEM 在Method ...
- 10-38 A4-7在订单详细信息表中查找包含产品种类数超过特定值的订单信息 (20 分)
在订单详情表(orderdetails)中查找订单中包含的不同产品的个数超过2的订单信息,显示订单号(OrderID)和总数量(重命名为totalQuantity ) select OrderID,s ...
- Flsak爱家租房--订单(获取用户订单、用户评论)
文章目录 0.页面效果 1.思路总结 2.后端代码 3.前端js 4.前端html 0.页面效果 1.思路总结 1)用户点击"我的订单",js向后端获取数据,并加载在前端的模板中: ...
- [Python] python + selenium 抓取 京东商品数据(商品名称,售价,店铺,分类,订单信息,好评率,评论等)
目录 一.环境 二.简介 三.京东网页分析 1.获取商品信息入口--商品列表链接获取 2.获取商品信息入口--商品详情链接获取 3.商品详情获取 4.商品评论获取 四.代码实现 五.运行结果 六.结语 ...
- taobao.trade.fullinfo.get( 获取单笔交易的详细信息 )淘宝订单接口
**taobao.trade.fullinfo.get( 获取单笔交易的详细信息 ) ¥开放平台基础API必须用户授权 获取单笔交易的详细信息 只有单笔订单的情况下Trade数据结构中才包含商品相关的 ...
- 【SSH网上商城项目实战19】订单信息的级联入库以及页面的缓存问题
购物车这一块还剩最后两个问题,就是订单信息的级联入库和页面缓存,这里的信息是指购物车和购物项,即我们将购物车的信息存入数据库的同时,也存入每个购物项的信息,而且外键都关联好,这涉及到了Hibernat ...
- luffcc项目-11-购物车实现,切换有效期选项、购物车商品的删除操作,结算页面,订单的生成
购物车实现 一.切换有效期选项 1.改变课程有效期 要实现课程有效期的计算,则必须我们要清楚一个课程可以有1到多个有效期选项.默认保存在课程模型中的价格如果有值,则这个值是永久有效的购买价格.如果有别 ...
- 对接快递100快递管家API之订单信息导入接口
订单信息导入 1.功能描述 用于将贵方系统待发货订单信息导入到快递管家,实现快递单打印:不支持批量导入需逐一提交: 2.接口信息 请求地址 https://b.kuaidi100.com/v7/ope ...
- 订单接口获取商品订单详情/物流信息/交易订单
淘宝官方商品详情.交易订单.订单详情.物流信息查询接口.适用于淘宝开放平台,可方便接入如订单同步.商品管理.插旗备注等API接口能力.现在我把整理好的订单商品接口分享给大家: 1.订单接口列表 物流管 ...
最新文章
- 【Silverlight】汉诺塔游戏,带AI
- c语言程序设计棋盘不对齐,经典c语言程序设计例(55页)-原创力文档
- 使用GDI+实现圆形进度条控件的平滑效果
- 计算机教学中因才施教,浅析高校《大学计算机基础》教学中的因材施教
- 系统带你学习 WebAPIs 第四讲
- 百度SEO未注册域名批量检测查询
- oracle数据库中sql%notfound的用法
- 调节效应检验(一):线性回归分析
- 正定矩阵和半正定矩阵
- C语言 fwrite 覆盖文件原始数据问题
- 取绝对值 :abs fabs fabsf用法
- 表单获取焦点和失去焦点
- PLC可编程控制器、单片机开发应用及变频调速综合实训装置
- envi5.3处理高分二号影像数据详细过程记录
- java报错root cause_[Filtered request failed.] with root cause java.io.OptionalDataException
- c++二维矩阵顺时针和逆时针旋转
- java mongo hint_聊一聊mongodb中的 explain 和 hint
- JAVA实现Freemarker生成动态数据的Word文档下载到浏览器
- 有关UDE(Unsupervised Domain Expansion)以及UDA,DG的思考与调研
- java练习题之华氏摄氏度与摄氏度的转化。
热门文章
- itlwm驱动_黑苹果春天:macOS英特尔/Intel无线驱动 itlwm v1.1.0 stable
- 微信企业号和手机关联的方式
- Minio客户端操作
- 我对说话人识别/声纹识别的研究综述
- pdf如何转换成ppt
- 写一个函数,输出四次“hello world“,每次间隔3秒
- 南卫理公会计算机官网,南卫理工会大学
- 开发脂肪秤方案PCBA设计
- 有没有手机版_漫威定制版智能手机壳 Galaxy S10的小伙伴不容错过
- .ps1 is not digitally signed. The script will not execute on the system.