1、将上次的购物车显示名字乱码的问题解决
2、将订单项表加入到数据库
3、将订单表加入到数据库
4、改变订单项表中数量时书表中的销量会随之改变
二、将上次的购物车显示名字乱码的问题解决分析乱码问题:
传递到后台的值,乱码的原因可能有两种
1、前台-->浏览器那一端就已经产生了乱码
2、后端-->在子控制器接受前端传递到后台的过程中出现乱码
解决思路:
前端的代码格式是UTF-8,后台是从mvc进来之后,会进入编码过滤器。
UTF-8----- ISO-8859-1就会进行编码错误
package com.zking.util;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter("*.action")
public class EncodingFiter implements Filter {private String encoding = "UTF-8";// 默认字符集
public EncodingFiter() {
super();
}public void destroy() {
}public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;// 中文处理必须放到 chain.doFilter(request, response)方法前面
res.setContentType("text/html;charset=" + this.encoding);
if (req.getMethod().equalsIgnoreCase("post")) {
req.setCharacterEncoding(this.encoding);
}//删除这一段
chain.doFilter(request, response);
}public void init(FilterConfig filterConfig) throws ServletException {
String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集
if (null != s && !s.trim().equals("")) {
this.encoding = s.trim();
}
}}
展示效果:
三、将订单项表加入到数据库1、需求:1.数据入订表单 2.数据入订单项 3.下单结束后,要将商品的销售数量发生改变
2、思路:
1、首先要将关于订单项表的属性创建一个实体类
2、接下来写好OrderItemDao层方法
3、接下来就是Action里面的代码
4、最后进行配置
1、首先要将关于订单项表的属性创建一个实体类(OrderItem 订单项表)
package com.zxy.entity;
public class OrderItem {
private long id;
private long oid;
private String bid;
private int quantity;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getOid() {
return oid;
}
public void setOid(long oid) {
this.oid = oid;
}
public String getBid() {
return bid;
}
public void setBid(String bid) {
this.bid = bid;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
@Override
public String toString() {
return "OrderItem [id=" + id + ", oid=" + oid + ", bid=" + bid + ", quantity=" + quantity + "]";
}
}
2、接下来写好OrderItemDao层方法
package com.zxy.dao; import com.zxy.entity.OrderItem; import com.zking.util.baseDao; public class OrderItemDao extends baseDao{ public void add(OrderItem t) throws Exception { String sql="insert into t_easyui_orderItem(oid,bid,quantity) values(?,?,?)"; super.executeUpdate(sql, t,new String[] {"oid","bid","quantity"}); } }
3、接下来就是Action里面的代码(订单入库以及订单项入库)
if (StringUtils.isNotBlank(pageStr) && pageStr.length() > 1) {
for (String item : pageStr.substring(1).split(",")) {
OrderItem oi=new OrderItem();
String[] itemEle=item.split("-");
oi.setBid(itemEle[0]);
oi.setOid(newest.getId());
oi.setQuantity(Integer.valueOf(itemEle[2]));
oid.add(oi);
Book b=new Book();
b.setName(itemEle[0]);
b.setSales(Integer.valueOf(itemEle[2]));
bd.editSales(b);
}
运行结果:
四、 将订单表加入到数据库Order:
package com.zxy.entity;
import java.util.Date;
public class Order {
private long id;
private long uid;
private Date orderTime;
private String consignee;
private String phone;
private String postalcode;
private String address;
private int sendType;
private Date sendTime;
private float orderPrice;
private int orderState;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getUid() {
return uid;
}
public void setUid(long uid) {
this.uid = uid;
}
public Date getOrderTime() {
return orderTime;
}
public void setOrderTime(Date orderTime) {
this.orderTime = orderTime;
}
public String getConsignee() {
return consignee;
}
public void setConsignee(String consignee) {
this.consignee = consignee;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPostalcode() {
return postalcode;
}
public void setPostalcode(String postalcode) {
this.postalcode = postalcode;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getSendType() {
return sendType;
}
public void setSendType(int sendType) {
this.sendType = sendType;
}
public Date getSendTime() {
return sendTime;
}
public void setSendTime(Date sendTime) {
this.sendTime = sendTime;
}
public float getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(float orderPrice) {
this.orderPrice = orderPrice;
}
public int getOrderState() {
return orderState;
}
public void setOrderState(int orderState) {
this.orderState = orderState;
}
@Override
public String toString() {
return "Order [id=" + id + ", uid=" + uid + ", orderTime=" + orderTime + ", consignee=" + consignee + ", phone="
+ phone + ", postalcode=" + postalcode + ", address=" + address + ", sendType=" + sendType + ", sendTime="
+ sendTime + ", orderPrice=" + orderPrice + ", orderState=" + orderState + "]";
}
}
OrderDao:
package com.zxy.dao; import java.util.List; import com.zking.util.baseDao; import com.zking.util.PageBean; import com.zxy.entity.Order; public class OrderDao extends baseDao{ public void add(Order t) throws Exception { String sql="insert into t_easyui_order(uid,orderTime,consignee,phone,postalcode,address,sendType,sendTime,orderPrice,orderState) " + "values(?,now(),?,?,?,?,?,?,?,?)"; super.executeUpdate(sql, t, new String[] {"uid","consignee","phone","postalcode","address","sendType","sendTime","orderPrice","orderState"}); } public List list(Order order,PageBean pageBean) throws Exception { String sql = "select * from t_easyui_order order by orderTime desc"; return super.executeQuery(sql, Order.class, pageBean); } }
ShoppingAction:
package com.zxy.web; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.fasterxml.jackson.databind.ObjectMapper; import com.zking.framework.ActionSupport; import com.zking.framework.ModelDriver; import com.zking.util.ResponseUtil; import com.zking.util.StringUtils; import com.zking.vo.ShoppingVo; import com.zxy.dao.BookDao; import com.zxy.dao.OrderDao; import com.zxy.dao.OrderItemDao; import com.zxy.entity.Book; import com.zxy.entity.Order; import com.zxy.entity.OrderItem; import com.zxy.entity.User; public class ShoppingAction extends ActionSupport implements ModelDriver{ private ShoppingVo vo=new ShoppingVo(); private OrderDao orderDao=new OrderDao(); private OrderItemDao orderItemDao=new OrderItemDao(); private BookDao bookDao=new BookDao(); public ShoppingVo getModel() { return vo; } //订单入库以及订单项入库 public void createOrder(HttpServletRequest req, HttpServletResponse resp) { User cuser=(User) req.getSession().getAttribute("cuser"); if(cuser == null) { return; } //组装数据 Order order=new Order(); order.setAddress(vo.getAddress()); order.setConsignee(vo.getConsignee()); //订单价格总计 float orderPrice=0f; String pageStr=vo.getPageStr(); if(StringUtils.isNotBlank(pageStr) && pageStr.length() > 1) { for(String item:pageStr.substring(1).split(",")) { String[] itemEle=item.split("-"); orderPrice +=Float.valueOf(itemEle[3]); } } order.setOrderPrice(orderPrice); order.setOrderState(1); order.setPhone(vo.getPhone()); order.setPostalcode(vo.getPostalcode()); order.setSendType(vo.getSendType()); order.setUid(cuser.getId()); try { orderDao.add(order); Order newest=orderDao.list(null,null).get(0); //需要设置当前订单项是属于哪个订单的,思路是查询出最新订单的ID if(StringUtils.isNotBlank(pageStr) && pageStr.length() > 1) { for(String item:pageStr.substring(1).split(",")) { OrderItem oi=new OrderItem(); String[] itemEle=item.split("-"); oi.setBid(itemEle[0]); //按照订单时间进行倒叙查询,取第一条数据即可 // oi.setOid(oid); oi.setOid(newest.getId()); oi.setQuantity(Integer.valueOf(itemEle[2])); orderItemDao.add(oi); //当前书籍被购买,那么这本书的销量就应该+Quantity Book b=new Book(); b.setName(itemEle[0]); b.setSales(Integer.valueOf(itemEle[2])); bookDao.editSales(b); } } } catch (Exception e) { e.printStackTrace(); } } }
运行结果:
运行之后:
t_easyui_order:订单表结果
t_easyui_orderItem:订单项表结果
五、改变订单项表中数量时书表中的销量会随之改变:
BookDao:根据名字进行销量的修改
public void editSales(Book book) throws Exception {
super.executeUpdate("update t_easyui_book set sales=sales+? where name=?", book, new String[] { "sales", "name" });
}
ShoppingAction:
//当前书籍被购买,那么这本书的销量就应该+Quantity Book b=new Book(); b.setName(itemEle[0]); b.setSales(Integer.valueOf(itemEle[2])); bookDao.editSales(b);
效果展示:
注意java入门到精通这本书的销量为30,接下来运行可以使得销量改变:
运行之后:
结束啦啦啦



