目录
5.3.2 PropertyValueServiceImpl
五、产品属性值设置
为PropertyValue增加一个property属性以及getter,setter
5.1 前端需求
点击设置属性,然后跳转到设置页面
只有修改和显示功能。
5.2 前端代码
<%--
Created by IntelliJ IDEA.
User:
Date: 2018/9/20
Time: 10:05
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@include file="../include/admin/adminHeader.jsp"%>
<%@include file="../include/admin/adminNavigator.jsp"%>
<title>编辑产品属性值</title>
<script>
$(function() {
$("input.pvValue").keyup(function(){
var value = $(this).val();
var page = "admin_propertyValue_update";
var pvid = $(this).attr("pvid");
var parentSpan = $(this).parent("span");
parentSpan.css("border","1px solid yellow");
$.post(
page,
{"value":value,"id":pvid},
function(result){
if("success" === result)
parentSpan.css("border","1px solid green");
else
parentSpan.css("border","1px solid red");
}
);
});
});
</script>
<div class="workingArea">
<ol class="breadcrumb">
<li><a href="admin_category_list">所有分类</a></li>
<li><a href="admin_product_list?cid=${product.category.id}">${product.category.name}</a></li>
<li class="active">${product.name}</li>
<li class="active">编辑产品属性</li>
</ol>
<div class="editPVDiv">
<c:forEach items="${list}" var="pv">
<div class="eachPV">
<span class="pvName" >${pv.property.name}</span>
<span class="pvValue"><input style="outline: none" class="pvValue" pvid="${pv.id}" type="text" value="${pv.value}"></span>
</div>
</c:forEach>
<div style="clear:both"></div>
</div>
</div>
5.3 后端接口
5.3.1 PropertyValueService
package com.li.tmall.service;
import com.li.tmall.pojo.Product;
import com.li.tmall.pojo.PropertyValue;
import java.util.List;
/**
* @Author: 98050
* Time: 2018-09-19 22:45
* Feature:CRUD
*/
public interface PropertyValueService {
/**
* 初始化
* @param product
*/
void init(Product product);
/**
* 更新属性值
* @param propertyValue
*/
void update(PropertyValue propertyValue);
/**
* 获取属性值
* @param ptid
* @param pid
* @return
*/
PropertyValue get(Integer ptid,Integer pid);
/**
* 根据商品id查询对应属性
* @param pid
* @return
*/
List<PropertyValue> list(Integer pid);
}
5.3.2 PropertyValueServiceImpl
PropertyValueServiceImpl实现了PropertyValueService:
1. get(int ptid, int pid)
根据属性id和产品id获取PropertyValue对象
2. list(int pid)
根据产品id获取所有的属性值
3. init方法
3.1 这个方法的作用是初始化PropertyValue。 为什么要初始化呢? 因为对于PropertyValue的管理,没有增加,只有修改。 所以需要通过初始化来进行自动地增加,以便于后面的修改。
3.2 首先根据产品获取分类,然后获取这个分类下的所有属性集合
3.3 然后用属性和id产品id去查询,看看这个属性和这个产品,是否已经存在属性值了。
3.4 如果不存在,那么就创建一个属性值,并设置其属性和产品,接着插入到数据库中。
这样就完成了属性值的初始化。
4. update(PropertyValue pv)
更新
package com.li.tmall.service.impl;
import com.li.tmall.mapper.PropertyValueMapper;
import com.li.tmall.pojo.Product;
import com.li.tmall.pojo.Property;
import com.li.tmall.pojo.PropertyValue;
import com.li.tmall.pojo.PropertyValueExample;
import com.li.tmall.service.PropertyService;
import com.li.tmall.service.PropertyValueService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author: 98050
* Time: 2018-09-19 22:57
* Feature:CRUD
*/
@Service
public class PropertyValueServiceImpl implements PropertyValueService {
@Autowired
private PropertyValueMapper propertyValueMapper;
@Autowired
private PropertyService propertyService;
@Override
public void init(Product product) {
List<Property> list = propertyService.list(product.getCid());
for (Property property : list){
PropertyValue propertyValue = get(property.getId(),product.getId());
if (propertyValue == null){
propertyValue = new PropertyValue();
propertyValue.setPid(product.getId());
propertyValue.setPtid(property.getId());
propertyValueMapper.insertSelective(propertyValue);
}
}
}
@Override
public void update(PropertyValue propertyValue) {
propertyValueMapper.updateByPrimaryKeySelective(propertyValue);
}
@Override
public PropertyValue get(Integer ptid, Integer pid) {
PropertyValueExample example = new PropertyValueExample();
example.createCriteria().andPtidEqualTo(ptid).andPidEqualTo(pid);
List<PropertyValue> list = propertyValueMapper.selectByExample(example);
if (!list.isEmpty()){
return list.get(0);
}else {
return null;
}
}
@Override
public List<PropertyValue> list(Integer pid) {
PropertyValueExample example = new PropertyValueExample();
example.createCriteria().andPidEqualTo(pid);
List<PropertyValue> list = propertyValueMapper.selectByExample(example);
for (PropertyValue propertyValue : list){
propertyValue.setProperty(propertyService.get(propertyValue.getPtid()));
}
return list;
}
}
5.3.3 PropertyValueController
package com.li.tmall.controller;
import com.li.tmall.pojo.Product;
import com.li.tmall.pojo.PropertyValue;
import com.li.tmall.service.ProductService;
import com.li.tmall.service.PropertyValueService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
* @Author: 98050
* Time: 2018-09-20 09:55
* Feature:
*/
@Controller
@RequestMapping("")
public class PropertyValueController {
@Autowired
private PropertyValueService propertyValueService;
@Autowired
private ProductService productService;
@RequestMapping("admin_propertyValue_edit")
public String edit(Model model, Integer pid){
Product product = productService.get(pid);
propertyValueService.init(product);
List<PropertyValue> list = propertyValueService.list(pid);
model.addAttribute("product",product);
model.addAttribute("list",list);
return "admin/editPropertyValue";
}
@RequestMapping("admin_propertyValue_update")
@ResponseBody
public String update(PropertyValue propertyValue){
propertyValueService.update(propertyValue);
return "success";
}
}
5.3.3.1 编辑功能
通过产品管理界面的设置属性,跳到编辑页面
调用PropertyValueController的edit方法:
1. 根据pid获取product对象,因为面包屑导航里需要显示产品的名称和分类的连接。
2. 初始化属性值: propertyValueService.init(p)。 因为在第一次访问的时候,这些属性值是不存在的,需要进行初始化。
3. 根据产品,获取其对应的属性值集合。
4. 服务端跳转到editPropertyValue.jsp 上
5. 在editPropertyValue.jsp上,用c:forEach遍历出这些属性值
5.3.3.2 修改功能
修改功能采用的是使用post方式提交ajax的异步调用方式
1. 监听输入框上的keyup事件
2. 获取输入框里的值
3. 获取输入框上的自定义属性pvid,这就是当前PropertyValue对应的id
4. 把边框的颜色修改为黄色,表示正在修改的意思
5. 借助JQuery的ajax函数 $.post,把id和值,提交到admin_propertyValue_update
6. admin_propertyValue_update导致PropertyValueController的update方法被调用
6.1 参数 PropertyValue 获取浏览器Ajax方式提交的参数
6.2 通过 propertyValueService.update(propertyValue) 更新到数据库
6.3 结合方法update上的注解@ResponseBody和return "success" 就会向浏览器返回字符串 "success"
6.4 propertyValueService调用的是propertValueMapper.updateByPrimaryKeySelective(pv); 这个方法只会更新propertyValue存在的字段,而参数PropertyValue只有id和value有值,所以即便这个PropertyValue对象没有pid和ptid值,修改的时候也不会影响该PropertyValue的pid和ptid。
7 浏览器判断如果返回值是"success",那么就把边框设置为绿色,表示修改成功,否则设置为红色,表示修改失败
5.3.3.3 删除,增加功能不需要
属性的维护是在分类中进行,这里仅仅做值的设置。 不提供删除和增加功能
六、用户管理
6.1 前端需求
6.2 前端代码
6.3 后端接口
6.3.1 UserService
package com.li.tmall.service;
import com.li.tmall.pojo.User;
import java.util.List;
/**
* @Author: 98050
* Time: 2018-09-20 10:50
* Feature:R
*/
public interface UserService {
/**
* 用户列表
* @return
*/
List<User> list();
/**
* 在查询订单时,为订单项中的user字段赋值
* @param id
* @return
*/
User get(Integer id);
}
6.3.2 UserServiceImpl
package com.li.tmall.service.impl;
import com.li.tmall.mapper.UserMapper;
import com.li.tmall.pojo.User;
import com.li.tmall.pojo.UserExample;
import com.li.tmall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author: 98050
* Time: 2018-09-20 10:53
* Feature:
*/
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> list() {
UserExample example = new UserExample();
example.setOrderByClause("id desc");
return userMapper.selectByExample(example);
}
@Override
public User get(Integer id) {
return userMapper.selectByPrimaryKey(id);
}
}
6.3.3 UserController
package com.li.tmall.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.li.tmall.pojo.User;
import com.li.tmall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import util.Page;
import java.util.List;
/**
* @Author: 98050
* Time: 2018-09-20 10:55
* Feature:
*/
@Controller
@RequestMapping("")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("admin_user_list")
public String list(Model model, Page page){
PageHelper.offsetPage(page.getStart(),page.getCount());
List<User> users = userService.list();
int total = (int) new PageInfo<>(users).getTotal();
page.setTotal(total);
model.addAttribute("users",users);
model.addAttribute("page",page);
return "admin/listUser";
}
}