客户名称 | 客户级别 | 客户来源 | 客户所属行业 | 电话 | 手机 | 操作 |
---|---|---|---|---|---|---|
目录
1.CRM:客户管理模块查询客户(分页)
1.1修改left.jsp
1.2编写Action中findAll的方法
1.3编写Service
1.4编写DAO
1.5配置页面跳转
1.6编写list.jsp
2.CRM:客户管理-保存客户上传客户资质
2.1文件上传知识回顾
2.1.1什么是文件上传
2.1.2文件上传技术
2.1.3文件上传要求
2.2文件上传代码实现
2.2.1第一步:修改添加页面
2.2.2第二步:修改action中的save方法
2.2.3第三步:把文件的路径存入数据库
2.2.4第四步:配置文件上传的拦截器(大小,格式)
3. CRM:客户管理-删除客户
3.1修改查询页面
3.2编写Action
3.3编写Service
3.4编写Dao
4. CRM:客户管理-修改客户
4.1修改列表页面
4.2编写action
4.3编写service
4.4编写Dao
4.4配置跳转页面
5. CRM:客户管理-按条件查询客户
5.1在列表页面异步加载查询条件的数据
5.2点击查询提交到action
5.3编写action
客户列表
//查询客户列表方法
public String findAll(){
//接收分页参数
//最好使用DetachedCriteria对象(带分页的条件查询)
DetachedCriteria detachedCriteria=DetachedCriteria.forClass(Customer.class);
//调用业务层查询
PageBean pageBean=customerService.findByPage(detachedCriteria,page,pageSize);
ActionContext.getContext().getValueStack().push(pageBean);
return "findAll";
}
//客户分页查询业务层方法
@Override
public PageBean findByPage(DetachedCriteria detachedCriteria, Integer page, Integer pageSize) {
PageBean pageBean=new PageBean();
//封装当前页数
pageBean.setPage(page);
//封装每页记录数
pageBean.setPageSize(pageSize);
//封装总记录数,调用Dao查询
Integer totalCount=customerDao.findCount(detachedCriteria);
pageBean.setTotalCount(totalCount);
//封装总页数
Double tc=totalCount.doubleValue();
Double num=Math.ceil(tc/pageSize);
pageBean.setTotalPage(num.intValue());
//封装每页显示数据的集合
Integer begin=(page-1)*pageSize;
List list=customerDao.findByPage(detachedCriteria,begin,pageSize);
pageBean.setList(list);
return pageBean;
}
// 带条件统计个数
@Override
public Integer findCount(DetachedCriteria detachedCriteria) {
detachedCriteria.setProjection(Projections.rowCount());
List count=(List) this.getHibernateTemplate().findByCriteria(detachedCriteria);
if(count.size()>0){
return count.get(0).intValue();
}
return null;
}
// 带条件分页查询客户
@Override
public List findByPage(DetachedCriteria detachedCriteria, Integer begin, Integer pageSize) {
detachedCriteria.setProjection(null);
return (List) this.getHibernateTemplate().findByCriteria(detachedCriteria, begin, pageSize);
}
/customer/add.jsp
/customer/list.jsp
客户名称
客户级别
客户来源
客户所属行业
电话
手机
操作
将本地文件通过流的形式上传到服务器。
jspSmartUpload:(很少用)
jspSmartUpload是一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点:
Fileupload:
FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名。
Servlet3.0:
Struts2框架:
底层实现是fileUpload,对FileUpload进行了封装。
1.表单的提交方式必须为post。
2.表单中需要提供,而且这个文件必须有name属性。
3.表单中enctype属性设置为multipart/form-data。
提供文件上传项:
文件:
修改表单属性:
Struts2的文件上传:在action中提供三个属性,对这个三个属性提供set方法。
/**
* @Title: CustomerAction.java
* @Package com.albertyy.crm.web.action
* @Description: TODO
* @author yangxianyang
* @date 2018年12月16日 下午4:07:41
* @version V1.0
*/
package com.albertyy.crm.web.action;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.hibernate.criterion.DetachedCriteria;
import com.albertyy.crm.entity.Customer;
import com.albertyy.crm.service.CustomerService;
import com.albertyy.crm.utils.PageBean;
import com.albertyy.crm.utils.UploadUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
/**
* 项目名称:CRM 类名称:CustomerAction 类描述: 客户管理Action 创建人:yangyangyang
* 创建时间:2018年12月16日 下午4:07:41 修改人:yangyangyang 修改时间:2018年12月16日 下午4:07:41
* 修改备注: @version
*/
public class CustomerAction extends ActionSupport implements ModelDriven {
// 模型驱动使用的对象
private Customer customer = new Customer();
@Override
public Customer getModel() {
// TODO Auto-generated method stub
return customer;
}
// 接收分页参数
private Integer page = 1;
public void setPage(Integer page) {
if (page == null) {
page = 1;
}
this.page = page;
}
private Integer pageSize = 5;
public void setPageSize(Integer pageSize) {
if (pageSize == null) {
pageSize = 5;
}
this.pageSize = pageSize;
}
// 注入Services
private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}
/*
* 文件上传提供的三个属性
*/
private String fileFileName;//文件名称
private File file;//上传的文件
private String fileContentType;//文件类型
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public void setFile(File file) {
this.file = file;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
// 客户管理跳转到添加页面
public String saveUI() {
return "saveUI";
}
// 保存客户的方法
public String save() {
//上传文件
if(file!=null){
//设置上传路径
ActionContext actionContext = ActionContext.getContext();
ServletContext servletContext = (ServletContext)actionContext.get(ServletActionContext.SERVLET_CONTEXT);
String path = servletContext.getRealPath("/")+"upload";
System.out.println(file);
//为了防止一个目录下存放相同的文件名:使用随机文件名
String uuidFileName=UploadUtils.getUuidFileName(fileFileName);
//为了防止一个目录下存放的文件过多:目录分离
String realPath=UploadUtils.getPath(uuidFileName);
//创建目录
String url=path+realPath;
File ml=new File(url);
if(!ml.exists()){
ml.mkdirs();
}
//文件上传
File dictFile=new File(url+"/"+uuidFileName);
try {
FileUtils.copyFile(file, dictFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//保存客户
customerService.save(customer);
// 跳转到查询页面
// 接收分页参数
// 最好使用DetachedCriteria对象(带分页的条件查询)
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
// 调用业务层查询
PageBean pageBean = customerService.findByPage(detachedCriteria, page, pageSize);
ActionContext.getContext().getValueStack().push(pageBean);
return "findAll";
}
// 查询客户列表方法
public String findAll() {
// 接收分页参数
// 最好使用DetachedCriteria对象(带分页的条件查询)
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
// 调用业务层查询
PageBean pageBean = customerService.findByPage(detachedCriteria, page, pageSize);
ActionContext.getContext().getValueStack().push(pageBean);
return "findAll";
}
}
修改实体:
private Long cust_id;
private String cust_name;
/*private String cust_source;
private String cust_industry;
private String cust_level;*/
private String cust_phone;
private String cust_mobile;
private String cust_image;
//客户和字典的关系是多对一,所以需要在多的一方,放一的一方的对象
private BaseDict baseDictSource;
private BaseDict baseDictIndustry;
private BaseDict baseDictLevel;
修改映射:
修改保存方法:
//设置image的值
customer.setCust_image(url+"/"+uuidFileName);
/customer/add.jsp
/customer/list.jsp
/customer/add.jsp
2097152
.jpg,.bmp,.png,.txt,.gif
//删除客户的方法
public String delete(){
customer=customerService.findById(customer.getCust_id());
//删除图片
String cust_image=customer.getCust_image();
if(cust_image!=null&&!cust_image.trim().equals("")){
File file=new File(cust_image);
if(file.exists()){
file.delete();
}
}
//删除客户
customerService.delete(customer);
return "deleteSuccess";
}
//根据id查询客户
@Override
public Customer findById(Long cust_id) {
return customerDao.findById(cust_id) ;
}
//删除客户
@Override
public void delete(Customer customer) {
customerDao.delete(customer);
}
//根据id查询
@Override
public Customer findById(Long cust_id) {
return this.getHibernateTemplate().get(Customer.class,cust_id);
}
//删除客户
@Override
public void delete(Customer customer) {
this.getHibernateTemplate().delete(customer);
}
此处使用弹窗作为修改页面:弹窗使用方法:https://blog.csdn.net/qq_23853743/article/details/85072719
弹窗页面:
异步提交JS代码:
/*
*客户查询页面js
*/
//删除弹窗
function toDelete(id) {
var btnFn = function() {
location.href = "${pageContext.request.contextPath}/customer_delete.action?cust_id="
+ id;
return false;
};
easyDialog.open({
container : {
header : '确认删除',
content : '您确定要删除该条数据吗?',
yesFn : btnFn,
noFn : true
}
});
};
// 修改弹窗
function toUpdate(id) {
customerInfo(id);
var content = $('#updateBox').html();
var btnFn = function() {
$("input#updateForm").click();;
return false;
};
easyDialog.open({
container : {
header : '修改用户信息',
content : content,
yesFn : btnFn,
noFn : true
}
});
// $('.easyDialog_wrapper').css('width','400px');
$('.easyDialog_text').css('height', '350px');
};
//异步请求加载要修改的客户的信息
function customerInfo(id){
// 加载客户信息
$.post("${pageContext.request.contextPath }/customer_edit.action",{"cust_id":id},function(data){
//遍历JOSN类型的数据
$.each(data,function(name,value){
$("select#"+name+" option[value='"+value+"']").prop("selected","selected");
$("input#"+name).val(value);
});
},"json");
}
//页面加载,异步查询字典数据
//页面加载函数就会执行:
$(function(){
// 加载客户来源
$.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code":"002"},function(data){
//遍历JOSN类型的数据
$(data).each(function(i,n){
$("select#cust_source").append("");
});
},"json");
// 加载客户所属行业
$.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code":"001"},function(data){
//遍历JOSN类型的数据
$(data).each(function(i,n){
$("select#cust_industry").append("");
});
},"json");
// 加载客户级别
$.post("${pageContext.request.contextPath }/baseDict_findByTypeCode.action",{"dict_type_code":"006"},function(data){
//遍历JOSN类型的数据
$(data).each(function(i,n){
$("select#cust_level").append("");
});
},"json");
});
// 用户修改异步查询信息的方法
public String edit() {
customer = customerService.findById(customer.getCust_id());
//把需要传送的数据封装成map集合
Map map=new TreeMap();
map.put("cust_id", customer.getCust_id());
map.put("cust_name", customer.getCust_name());
map.put("cust_source", customer.getBaseDictSource().getDict_id());
map.put("cust_industry", customer.getBaseDictIndustry().getDict_id());
map.put("cust_level", customer.getBaseDictLevel().getDict_id());
map.put("cust_phone", customer.getCust_phone());
map.put("cust_mobile", customer.getCust_mobile());
map.put("cust_image", customer.getCust_image());
// 转成json
JSONObject jsonObject = JSONObject.fromObject(map);
//System.out.println(jsonObject);
// 将JSON数据传到页面
try {
ServletActionContext.getResponse().setContentType("text/html;charset=UTF-8");
ServletActionContext.getResponse().getWriter().println(jsonObject.toString());
} catch (IOException e) {
e.printStackTrace();
}
return NONE;
}
// 客户修改的方法
public String update() {
// 修改图片,获得原来的图片同时,上传新图片
if (file != null) {
String cust_image = customer.getCust_image();
if (cust_image != null && !cust_image.trim().equals("")) {
File exitfile = new File(cust_image);
if (exitfile.exists()) {
exitfile.delete();
}
}
// 上传图片
// 设置上传路径
String directory = "/upload";
String path = ServletActionContext.getServletContext().getRealPath(directory);
// System.out.println(file);
// 为了防止一个目录下存放相同的文件名:使用随机文件名
String uuidFileName = UploadUtils.getUuidFileName(fileFileName);
// 为了防止一个目录下存放的文件过多:目录分离
String realPath = UploadUtils.getPath(uuidFileName);
// 创建目录
String url = path + realPath;
File ml = new File(url);
if (!ml.exists()) {
ml.mkdirs();
}
// 文件上传
File dictFile = new File(url + "/" + uuidFileName);
try {
FileUtils.copyFile(file, dictFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//重新设置image的值
customer.setCust_image(url + "/" + uuidFileName);
}
customerService.update(customer);
return "updateSuccess";
}
//根据id查询客户
@Override
public Customer findById(Long cust_id) {
return customerDao.findById(cust_id) ;
}
//修改客户业务层方法
@Override
public void update(Customer customer) {
customerDao.update(customer);
}
//根据id查询
@Override
public Customer findById(Long cust_id) {
return this.getHibernateTemplate().get(Customer.class,cust_id);
}
//删除客户
@Override
public void delete(Customer customer) {
this.getHibernateTemplate().delete(customer);
}
//修改客户方法
@Override
public void update(Customer customer) {
this.getHibernateTemplate().update(customer);
}
/customer/add.jsp
/customer/list.jsp
/customer_findAll.action
/customer_findAll.action
/customer/add.jsp
5242880
.jpg,.bmp,.png,.txt,.gif
在客户列表上显示出相应条件,根据输入条件查询客户。