开发工具:eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
<c:if test="${shopCar.article.discount != 0.0}">
折后价:<span class="discountPrice"><fmt:formatNumber value="${shopCar.article.discountPrice}" pattern="0.00"></fmt:formatNumber></span>
</c:if>
</td>
<td><span class="glyphicon glyphicon-minus" onclick="minuFun('${shopCar.article.id}')"></span>
<input id="${shopCar.article.id}" value="${shopCar.buynum}"
style="width: 40px; text-align: center;" onblur="validNum(this,'${shopCar.article.id}')"/>
<span class="glyphicon glyphicon-plus"
onclick="addFun('${shopCar.article.id}')"></span>
</td>
<td><fmt:formatNumber value="${shopCar.article.discountPrice* shopCar.buynum}" pattern="0.00"></fmt:formatNumber></td>
<td><a href="${pageContext.request.contextPath}/shopCar/deleteShopCar.do?id=${shopCar.article.id}">删除</a>
<a>收藏</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
<!-- 内容主体结束 -->
</div>
<!--/row-->
<form action="${pageContext.request.contextPath}/order/checkOrder.do" method="post" id="form">
<!-- 通过隐藏输入框 将订单相关信息传递至后台 -->
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderItemMapper orderItemMapper;
/* (non-Javadoc)
* 提交订单
* #1_2_216.0#5_1_158.4 == > 1_2_216.0#5_1_158.4
*/
@Override
public Order orderSubmit(String orderInfo) {
// TODO Auto-generated method stub
//创建订单对象
Order order = new Order();
try {
String[] orderInfos = orderInfo.substring(1).split("#");
//指定下单时间
order.setCreateDate(new Date());
<nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar" aria-expanded="false"
aria-controls="navbar">
<span class="sr-only">显示导航条</span> <span class="icon-bar"></span> <span
class="icon-bar"></span> <span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="${ctx}/article/index">美妆商城</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="${ctx}/article/index">首页</a></li>
<li><a href="${ctx}/shopCar/showShopCar.do">购物车</a></li>
<li><a href="${ctx}/order/showOrder.do">我的订单</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<c:choose>
<c:when test="${not empty session_user}">
<li><a href="#"> <span style='color: red;'></span>
</a></li>
<li><a href="#">欢迎[<font color="red">${session_user.name}</font>]访问!</a></li>
<li><a href="${ctx}/user/logout">退出</a></li>
<li><a href="${ctx}/register">免费注册</a></li>
</c:when>
/**
* @return the pageSize
*/
public int getPageSize() {
return pageSize;
}
/**
* @param pageSize the pageSize to set
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* @return the totalNum
*/
public int getTotalNum() {
return totalNum;
String sign = WXPayUtil.generateSignature(mp, ConfigConstant.key);
StringBuilder sb = new StringBuilder();
sb.append("<xml>");
sb.append("<appid>" + mp.get("appid") + "</appid>");
sb.append("<mch_id><![CDATA[" + mp.get("mch_id") + "]]></mch_id>");
sb.append("<out_trade_no><![CDATA[" + mp.get("out_trade_no") + "]]></out_trade_no>");
sb.append("<nonce_str>" + mp.get("nonce_str") + "</nonce_str>");
sb.append("<sign><![CDATA[" + sign + "]]></sign>");
sb.append("</xml>");
String url = "https://api.mch.weixin.qq.com/pay/orderquery";
String str = UrlPreUtils.post(url, sb.toString());
Map<String, String> retmap = new HashMap<String, String>();
try {
//与微信交互并获取信息
retmap = WXPayUtil.xmlToMap(str);
} catch (Exception e) {
e.printStackTrace();
}
return retmap;
<li>常见问题</li>
<li>购物指南</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>配送方式</h4>
<ul class="unstyled">
<li>上门自提</li>
<li>211限时达</li>
<li>配送服务查询</li>
<li>配送费收取标准</li>
<li>海外配送</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>支付方式</h4>
<ul class="unstyled">
<li>货到付款</li>
<li>在线支付</li>
<li>分期付款</li>
<li>邮局汇款</li>
<li>公司转账</li>
</ul>
</div>
<div class="yui3-u-1-6">
<h4>售后服务</h4>
<ul class="unstyled">
<li>售后政策</li>
//获取库存数
var kucun = parseInt("${article.storage}")
//重新给输入框中的value赋值
obj.value = (num + 1) > kucun ? kucun : num + 1;
//发送请求更新购物车中购买的数量
window.location = "${pageContext.request.contextPath}/shopCar/updateShopcar.do?id="+articleId+"&number="+obj.value;
}
//为购买的数量对应的输入框 绑定失去焦点事件
function validNum(obj,articleId){
//用户输入的数字 必须为 大于等于1的正整数,并且不能大于库存
//1、判断用户输入的是否是数字 isNaN: is Not a Number
if(isNaN(obj.value)||obj.value < 1){
//用户输入的不是数字或者小于1的数字 都不合法,则 使用默认购买数量
obj.value = 1;
}else if(obj.value > parseInt("${article.storage}")){
obj.value = 1;
alert("购买数量已超过库存数,请核实");
}else{
//防止用户用户输入小数 假设用户输入3 == 》3 用户输入 3.5 == 》4 对用户输入的值 进行向上取整
obj.value = Math.ceil(obj.value);
//发送请求更新购物车中购买的数量
public static final String HMACSHA256 = "HMAC-SHA256";
public static final String MD5 = "MD5";
public static final String FIELD_SIGN = "sign";
public static final String FIELD_SIGN_TYPE = "sign_type";
public static final String WXPAYSDK_VERSION = "WXPaySDK/3.0.9";
public static final String USER_AGENT = WXPAYSDK_VERSION +
" (" + System.getProperty("os.arch") + " " + System.getProperty("os.name") + " " + System.getProperty("os.version") +
") Java/" + System.getProperty("java.version") + " HttpClient/" + HttpClient.class.getPackage().getImplementationVersion();
public static final String MICROPAY_URL_SUFFIX = "/pay/micropay";
public static final String UNIFIEDORDER_URL_SUFFIX = "/pay/unifiedorder";
public static final String ORDERQUERY_URL_SUFFIX = "/pay/orderquery";
public static final String REVERSE_URL_SUFFIX = "/secapi/pay/reverse";
public static final String CLOSEORDER_URL_SUFFIX = "/pay/closeorder";
public static final String REFUND_URL_SUFFIX = "/secapi/pay/refund";
public static final String REFUNDQUERY_URL_SUFFIX = "/pay/refundquery";
public static final String DOWNLOADBILL_URL_SUFFIX = "/pay/downloadbill";
public static final String REPORT_URL_SUFFIX = "/payitil/report";
public static final String SHORTURL_URL_SUFFIX = "/tools/shorturl";
public static final String AUTHCODETOOPENID_URL_SUFFIX = "/tools/authcodetoopenid";
// sandbox
//用户输入的不是数字或者小于1的数字 都不合法,则 使用默认购买数量
obj.value = 1;
}else if(obj.value > parseInt("${article.storage}")){
obj.value = 1;
alert("购买数量已超过库存数,请核实");
}else{
//防止用户用户输入小数 假设用户输入3 == 》3 用户输入 3.5 == 》4 对用户输入的值 进行向上取整
obj.value = Math.ceil(obj.value);
//发送请求更新购物车中购买的数量
window.location = "${pageContext.request.contextPath}/shopCar/updateShopcar.do?id="+articleId+"&number="+obj.value;
}
}
//为全选绑定单击事件
function checkAll(checkObj){
//获取所有的子 checkbox
var boxes = document.getElementsByName("box");
//alert(boxes.length);
//将订单相关信息存放在 隐藏输入框中
var orderInfo = document.getElementById("orderInfo");
orderInfo.value = "";
<div class="form-group">
<label class="col-sm-2 control-label">地址</label>
<div class="col-sm-8">
<textarea id="address" name="address" rows="4" cols="30"
class="form-control" placeholder="请输入您的地址信息"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">电子邮箱:</label>
<div class="col-sm-3">
<input type="text" id="email" value="" name="email"
class="form-control" placeholder="请输入您的邮箱">
</div>
<div class="col-sm-3">
<span style="color: red;"></span>
</div>
</div>
<div class="form-group">
/**
* 生成带有 sign 的 XML 格式字符串
*
* @param data Map类型数据
* @param key API密钥
* @param signType 签名类型
* @return 含有sign字段的XML
*/
public static String generateSignedXml(final Map<String, String> data, String key, SignType signType) throws Exception {
String sign = generateSignature(data, key, signType);
data.put(WXPayConstants.FIELD_SIGN, sign);
return mapToXml(data);
}
/**
* 判断签名是否正确
page.append(" <span>第 "+pageModel.getPageIndex()+" 页/共 "+totalPage+"页 ,共 "+pageModel.getTotalNum()+"条数据 </span>");
}else{
//当前页码在中间
page.append("<a href='"+submitUrl+"&pageIndex="+1+"'>首页</a>");
page.append("<a href='"+submitUrl+"&pageIndex="+(pageModel.getPageIndex()-1)+"'>上一页</a>");
page.append("<a href='"+submitUrl+"&pageIndex="+(pageModel.getPageIndex()+1)+"'>下一页</a>");
page.append("<a href='"+submitUrl+"&pageIndex="+totalPage+"'>尾页</a>");
page.append(" <span>第 "+pageModel.getPageIndex()+" 页/共 "+totalPage+"页 ,共 "+pageModel.getTotalNum()+"条数据 </span>");
}
}
write.print(page.toString());
write.flush();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
<body>
<%-- <jsp:include page="/WEB-INF/jsp/commons/banner.jsp"></jsp:include> --%>
<nav class="navbar navbar-fixed-top navbar-inverse" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="<c:url value="/article_manager/getAll.action"/>">电商系统,卖家系统-商品管理</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="<c:url value="/article_manager/getAll.action"/>">商品管理</a></li>
<li><a href="<c:url value="/articleType_manager/getAll.action"/>">商品类型管理</a></li>
<li><a href="<c:url value="/order_manager/getAll.action"/>">订单管理</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<c:choose>
<c:when test="${not empty session_user}">
<li><a href="#"> <span style='color: red;'></span>
</li>
<li class="grid-service-item intro intro4">
<i class="serivce-item fl"></i>
<div class="service-text">
<h4>正品保障</h4>
<p>正品保障,提供发票</p>
</div>
</li>
<li class="grid-service-item intro intro5">
<i class="serivce-item fl"></i>
<div class="service-text">
<h4>正品保障</h4>
<p>正品保障,提供发票</p>
</tr>
</thead>
<tbody>
<c:forEach items="${shopCars}" var="shopCar">
<tr>
<td style="vertical-align: middle;"><input type="checkbox"
name="box" value="${shopCar.article.id}_${shopCar.buynum}_${shopCar.article.discountPrice* shopCar.buynum}" onclick="checkboxFun(this.value)"/> <span id="total_1"
style="display: none;">${shopCar.article.price}</span></td>
<td><img alt="商品图片"
src="${pageContext.request.contextPath}/image/article/${shopCar.article.image}" style="width:200px;height:200px"></td>
<td>${shopCar.article.title}</td>
<td>
价格:<span class="${shopCar.article.discount!=0.0 ? 'price':''}">${shopCar.article.price}</span>
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.demo.shop.bean.User;
import com.demo.manage.mapper.ManagerUserMapper;
import com.demo.manage.service.ManagerUserServiceI;
import com.sun.mail.smtp.SMTPMessage;
@Service(value="muserService")
@Transactional
public class ManagerUserServicempl implements ManagerUserServiceI {
@Autowired
private ManagerUserMapper userMapper;
</footer>
<script>
/* $('#registerForm').bootstrapValidator({
// live: 'disabled',
message : 'This value is not valid',
feedbackIcons : {
valid : 'glyphicon glyphicon-ok',
invalid : 'glyphicon glyphicon-remove',
validating : 'glyphicon glyphicon-refresh'
},
fields : {
"user.name" : {
validators : {
notEmpty : {
message : '真实姓名不能为空'
}
}
},
"user.loginName" : {
message : '用户名验证失败',
validators : {
notEmpty : {
import com.demo.shop.bean.ArticleType;
import com.demo.manage.service.ManagerArticleServiceI;
import com.demo.manage.service.ManagerArticleTypeServiceI;
import com.demo.manage.util.pager.PageModel;
@Controller
@RequestMapping("/article_manager")
public class ManagerArticleController {
@Autowired
private ManagerArticleServiceI articleService;
@Autowired
private ManagerArticleTypeServiceI articleTypeService;
//展示首页商品信息
@RequestMapping("/getAll.action")
public String getAllArticles(Model model,String typeCode,String title,PageModel pageModel) {
//根据商品类型以及商品的标题获取商品信息
List<Article> articles = articleService.getAllArticles(typeCode,title,pageModel);
model.addAttribute("articles", articles);
model.addAttribute("pageModel", pageModel);
}else {
//maxCode:00010009 == >00010010
code.append(parentCode);
Integer code2 = Integer.valueOf(maxCode.substring(4)) + 1;
for(int i=0;i<4 - String.valueOf(code2).length() ; i++) {
code.append("0");
}
code.append(code2);
}
}else {
//获取最大的一级物品类型code
String maxFirstCode = articleTypeMapper.findMaxFiCode();
Integer code2 = Integer.valueOf(maxFirstCode) + 1;
for(int i=0;i<4 - String.valueOf(code2).length() ; i++) {
code.append("0");
}
code.append(code2);
}
class="form-control" placeholder="请输入您的邮箱">
</div>
<div class="col-sm-3">
<span style="color: red;"></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"></label>
<div class="col-sm-3">
<button type="button" id="btn_submit" class="btn btn-success">
<span class="glyphicon glyphicon-user">注册
</button>
<button type="reset" class="btn btn-info">
<span class="glyphicon glyphicon-edit">重置
</button>
</div>
</div>
</form>
</div>
<footer>
运行环境
Java≥6、Tomcat≥7.0、MySQL≥5.5
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
技术框架
JavaBean MVC JSP SSM(Spring SpringMVC MyBatis) MySQL Bootstrap JavaScript
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
前台:
首页展示商品信息,注册,登录,查询商品,看商品详情,添加商品至购物车,更新、删除购物车中商品信息,下订单、订单查看等操作
后台:登录,商品上架下架、商品信息修改、添加,订单查看,类型管理:商品类型新增删除以及修改查询等
前台:
后台: