从订单信息页面进入订单详细商品页面,最简单的MVC思想
2017-11-24 17:15
411 查看
前言
习惯上图,看流程图把,下面是具体实现以后的一个流程图。步骤-
(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来一步步看,这样我们就可以快速定位问题,多做多调试,其实编程也可以很快乐,那种一点点的成就感!喜欢的可以关注,有问题,或者对上面的解决方案你有更好的,欢迎探讨,谢谢!
相关文章推荐
- 点击图片之后进入商品详情页面,但是无法加载信息
- 订单商品信息跨页面传递中的加密与解密及过滤特殊字符串
- jsp的EL表达式中建立链接隐藏id,点击链接进入新页面,显示详细信息
- 产品分类页面得到当前分类ID,产品详细信息页面得到当前产品默认商店的的商品名称 ---NAME
- 商品浏览系统之商品详细信息显示页面实现
- 将商品详细信息页面建成静态页面
- 获得当前分类ID,产品详细信息页面得到当前产品默认商店的的商品名称
- 简单知识——跨页面信息传递
- C#窗体应用程序 vs + sql server2008连接举例,简单的学生信息管理系统 补充注册页面,如有侵权,请联系本人删除
- 把选中的商品信息传到另外一个页面
- ECSHOP全站调用购物车显示商品图片,价格,数量,总价等详细信息
- 弹出页面修改列表中某列的详细信息【改完后刷新父页面】
- 在订单成功页面获取相应的产品信息
- jQuery 实现一个简单的信息反馈或者信息收集的页面
- ecshop 商品详情页面显示商品简单描述
- GC调优方案,步骤一:获得详细GC信息2个简单方法
- Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
- 【SSH网上商城项目实战19】订单信息的级联入库以及页面的缓存问题
- ASP.NET MVC 简单的分页思想与实现
- MVC北京络捷斯特第三方物流系统技术解析(六)补录订单运输信息