准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器
示例说明:
分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加。
对于公司使用freemarket或者jsp或者volocity,有一定的启示意思。
不论视图用的是jsp或者非jsp,都可以参考这个示例。
下面采用的是MVC模式。
简单说下MVC模式吧
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
- View(视图) - 视图代表模型包含的数据的可视化。
- Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
下面的示例足以验证MVC,可供参考:
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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>发放优惠券</title> <link href="${APP_PATH}/css/main.css" type="text/css" rel="stylesheet"> <link rel="stylesheet" href="${APP_PATH}/layui/css/layui.css" media="all"> <script src="${APP_PATH}/js/easyui/jquery-1.8.0.min.js" type="text/javascript"></script> </head> <body> <div class="layui-container"> <div class="layui-row"> <h2>发放优惠券</h2> <script> function checkAll() { var all=document.getElementById('all');//获取到点击全选的那个复选框的id var one=document.getElementsByName('memberId');//获取到复选框的名称 if(all.checked==true){//因为获得的是数组,所以要循环 为每一个checked赋值 for(var i=0;i<one.length;i++){ one[i].checked=true; } }else{ for(var j=0;j<one.length;j++){ one[j].checked=false; } } } $(function(){ $("#tishi").click(function(){ alert("分发成功"); }); }); </script> <div style="margin: 20px 0;"></div> <div class="easyui-layout" style="width: 700px; height: 350px;"> <div data-options="region:'center',title:'Main Title',iconCls:'icon-ok'"> <form action="${pageContext.request.contextPath}/json" method="post" id="checkform"> <table class="easyui-datagrid" data-options="url:'datagrid_data1.json',method:'get',border:false,singleSelect:true,fit:true,fitColumns:true"> <thead> <tr> <th data-options="field:'itemid'" width="80">昵称</th> <th data-options="field:'productid'" width="100">手机号</th> <th data-options="field:'listprice',align:'right'" width="80">操作</th> </tr> </thead> <c:if test="${list!=null}"> <c:forEach items="${list}" var="app"> <tr> <td>${app.nickName}</td> <td>${app.account}</td> <td><input type="checkbox" name="memberId" value="${app.memberId}" /></td> </tr> </c:forEach> </c:if> </table> <input type="hidden" name="hotelNo" id="hotelNo" value="${hotelNo}"/> <input type="hidden" name="couponId" id="couponId_to" readonly="readonly" value="${couponId }" /> <input id="all" onclick="checkAll()" type="checkbox" />全选 <br /> <input type="submit" id="tishi" onclick="checkAll()" value="提交" /> </form> </div> </div> </div> </div> <!-- js --> <script src="${APP_PATH}/layui/layui.js" charset="utf-8"></script> <script src="${APP_PATH}/js/layer/layer-v3.1.1/layer/mobile/layer.js" type="text/javascript"></script> </body> </html>
Controller代码:
/** * 优惠券批量分发给用户 * @param qv * @return */ @RequestMapping(value = "json", method = {RequestMethod.POST }) public Object save(QueryVo qv,HttpServletRequest request,Model model){ String hotelNo = request.getParameter("hotelNo"); Hotel hotel = hotelService.queryHotelNoInfo(hotelNo); logger.info("优惠券Id:"+qv.getCouponId()); logger.info("所有数组:"+qv.getMemberId()); //判断是否为空 if (qv.getMemberId()!=null) { int size=java.lang.reflect.Array.getLength(qv.getMemberId()); //获取传过来的数组长度 System.out.println(size); String memberId[]=qv.getMemberId();//获取数组中的值 String couponId=qv.getCouponId();//获取优惠券ID for (int i = 0; i < memberId.length; i++) { AccountCoupon ac = new AccountCoupon(); ac.setMemberId(memberId[i]); ac.setCouponId(couponId); ac.setFrom(null); SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); String date = sdf.format(new Date()); ac.setReceiveDate(date); ac.setStatus(new Consts().COUPON_UNUSED);//默认状态 "待使用" ac.setUsedDate(null); List<AccountCoupon> list = new ArrayList<AccountCoupon>(); list.add(ac);//添加到集合中 logger.info("批量分发优惠券成功"); accountCouponService.insertAccountCouponInfo(list);//批量插入数据 } } model.addAttribute("hotel", hotel); return "/Set/transit4"; }
对应的DAO和Service及其实现类和xml如下:
DAO和Service代码相同不变
//批量插入数据 public void insertAccountCouponInfo(@Param("acs")List<AccountCoupon> acs);
Service实现类如下:
@Override public void insertAccountCouponInfo(List<AccountCoupon> acs) { accountCouponMapper.insertAccountCouponInfo(acs); }
xml:
<!-- 批量發放优惠券 --> <insert id="insertAccountCouponInfo"> INSERT INTO `account_coupon` (`member_id`, `coupon_id`, `status`, `receive_date`, `from`, `used_date`) VALUES <foreach collection="acs" item="ac" index="index" separator=","> (#{ac.memberId,jdbcType=VARCHAR}, #{ac.couponId,jdbcType=VARCHAR}, #{ac.status,jdbcType=VARCHAR}, #{ac.receiveDate,jdbcType=VARCHAR}, #{ac.from,jdbcType=VARCHAR} , #{ac.usedDate}) </foreach> </insert>
对应的实体如下:
public class AccountCoupon { /** 自增主键*/ private String id; /** 用户id*/ private String memberId; /** 优惠券id*/ private String couponId; /** 状态 未领取0 待使用1 已使用2 已过期3 冻结4 已核销5*/ private String status; /** 领取优惠券日期*/ private String receiveDate; /** 优惠券来源发放或主动领取*/ private String from; /** 使用日期*/ private String usedDate; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getMemberId() { return memberId; } public void setMemberId(String memberId) { this.memberId = memberId; } public String getCouponId() { return couponId; } public void setCouponId(String couponId) { this.couponId = couponId; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getReceiveDate() { return receiveDate; } public void setReceiveDate(String receiveDate) { this.receiveDate = receiveDate; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String getUsedDate() { return usedDate; } public void setUsedDate(String usedDate) { this.usedDate = usedDate; } }