准備環境: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; } }
