SSH-Day02客户关系管理系统

2024-01-28 21:08

本文主要是介绍SSH-Day02客户关系管理系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

select

要求刚进入页面,就需要请求后台,然后展示数据到jsp

$(function(){//客户级别var url="${pageContext.request.contextPath}/dict_findDictByCode.action";var params={"dict_type_code":"006"};$.post(url,params,function(data){$(data).each(function(i,n){//<option selected="selected"></option>var dict_id="${model.level.dict_id}";if(dict_id==n.dict_id){$("#cus_level").append("<option selected='selected' value='"+n.dict_id+"'>"+n.dict_item_name+"</option>");}else{$("#cus_level").append("<option value='"+n.dict_id+"'>"+n.dict_item_name+"</option>");}});},"json");
}

if判断逻辑是为了数据回显,model是action类中个getModel()方法,返回的是Dict对象

$("#levelId").append("<option value='"+n.dict_id+"' selected>"+n.dict_item_name+"</option>");

多对一

Customer对Dict是多对一的关系,所以我们需要修改Customer.java和Customer.hbm.xml。
为什么不修改Dict.java和Dict.hbm.xml呢?

因为我们不需要dict.getCustomers()来获取List

public class Customer {	private Long cust_id;private String cust_name;private Long cust_user_id;private Long cust_create_id;//	private String cust_source;
//	private String cust_industry;
//	private String cust_level;//Dict:Customer  一对多private Dict source;private Dict industry;private Dict level;private String cust_linkman;private String cust_phone;private String cust_mobile;private String filepath;
<hibernate-mapping><class name="com.cqc.crm.domain.Customer" table="cst_customer"><id name="cust_id" column="cust_id"><generator class="native"/></id><property name="cust_name" column="cust_name"/><property name="cust_user_id" column="cust_user_id"/><property name="cust_create_id" column="user_password"/><!-- 	<property name="cust_source" column="cust_source"/><property name="cust_industry" column="cust_industry"/><property name="cust_level" column="cust_level"/> --><property name="cust_linkman" column="cust_linkman"/><property name="cust_phone" column="cust_phone"/><property name="cust_mobile" column="cust_mobile"/><property name="filepath" column="filepath"/><!-- 多对一 --><many-to-one name="source" class="com.cqc.crm.domain.Dict" column="cust_source"/><many-to-one name="industry" class="com.cqc.crm.domain.Dict" column="cust_industry"/><many-to-one name="level" class="com.cqc.crm.domain.Dict" column="cust_level"/></class></hibernate-mapping>

fastjson

public class Role {private String rname;private Person person;
}
public class Person {private String pname;private Role role;
}

问题一:fastjson的循环引用

List<Customer> list = new ArrayList<Customer>();
Customer c = new Customer();
c.setCust_id(20L);
c.setCust_name("测试");
c.setCust_phone("120");
list.add(c);
list.add(c);// 转换成json的字符串String jsonString = JSON.toJSONString(list);

会报错
解决如下:

// 禁止循环的引用
String jsonString = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);

问题二:fastjson的死循环

设置SerializerFeature只是解决了循环检测的问题,当时如果a b互相持有对方的话,会造成死循环。

Person p = new Person();
p.setPname("美美");
Role r = new Role();
r.setRname("管理员");
p.setRole(r);
r.setPerson(p);// 禁止循环的引用
String jsonString = JSON.toJSONString(r,SerializerFeature.DisableCircularReferenceDetect);

解决方法:
其中一方不进行序列化

public class Person {private String pname;	@JSONField(serialize=false)private Role role;

上传File

jsp页面要求

* method="post"
* enctype="multipart/form-data"
* <input type="file" name="myfile">

action要求

在Action中编写文件上传,需要定义三个属性
> 文件类型File ,属性名与表单中file的name属性名一致.
> 字符串类型String , 属性名:前段是name属性名一致 + ContentType;
> 字符串类型String , 属性名:前段是name属性名一致+FileName;

    > 最后需要为上述的三个属性提供set方法。> 可以通过FileUtils提供 copyFile 进行文件复制,将上传文件 保存到服务器端
private File upLoadFile;
private String upLoadFileContentType;
private String upLoadFileFileName;
public void setUpLoadFile(File upLoadFile) {this.upLoadFile = upLoadFile;
}
public void setUpLoadFileContentType(String upLoadFileContentType) {this.upLoadFileContentType = upLoadFileContentType;
}
public void setUpLoadFileFileName(String upLoadFileFileName) {this.upLoadFileFileName = upLoadFileFileName;
}/*** 新增客户* @return*/
public String add() {String path=ServletActionContext.getRequest().getContextPath();int index = upLoadFileFileName.lastIndexOf(".");String lastName = upLoadFileFileName.substring(index);upLoadFileFileName=UUID.randomUUID().toString().replace("-", "")+lastName;File file = new File(path+"/"+upLoadFileFileName);try {FileUtils.copyFile(upLoadFile, file);customer.setFilepath(file.getAbsolutePath());} catch (IOException e) {e.printStackTrace();}customerService.add(customer);return "toList";
}

怎么限制上传文件的大小?

在struts.xml中配置常量

<struts><!-- 设置上传文件的总大小,默认是2M  struts.multipart.maxSize=2097152 --><constant name="struts.multipart.maxSize" value="20971520"/>
</struts>

或者放到action标签下的拦截器标签中

<action name="customer_*" class="customerAction" method="{1}"><result name="list">/jsp/customer/list.jsp</result><result name="toList" type="redirectAction">customer_findByPage.action</result><result name="input" type="redirectAction">/jsp/error.jsp</result><!-- 引入默认的拦截器 --><interceptor-ref name="defaultStack"><!-- 设置单个上传文件的大小 --><param name="fileUpload.maximumSize">2097152</param><!-- 决定上传文件的类型 --><param name="fileUpload.allowedExtensions">.jpg,.txt</param></interceptor-ref>
</action>

怎么限制上传文件的后缀名?

<action name="customer_*" class="customerAction" method="{1}"><result name="list">/jsp/customer/list.jsp</result><!-- 引入默认的拦截器 --><interceptor-ref name="defaultStack"><!-- 决定上传文件的类型 --><param name="fileUpload.allowedExtensions">.jpg,.txt</param></interceptor-ref>
</action>

代码:
https://gitee.com/ssh_jicheng/crm28day02

这篇关于SSH-Day02客户关系管理系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654772

相关文章

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

在SSH的基础上使用jquery.uploadify.js上传文件

在SSH框架的基础上,使用jquery.uploadify.js实现文件的上传,之前搞了好几天,都上传不了, 在Action那边File接收到的总是为null, 为了这个还上网搜了好多相关的信息,但都不行,最后还是搜到一篇文章帮助到我了,希望能帮助到为之困扰的人。 jsp页面的关键代码: <link rel="stylesheet" type="text/css" href="${page

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业

图书管理系统系统分享

分享一个图书管理系统,Java、SpringBoot、Vue和MySQL开发的图书馆管理系统 gitee项目地址:https://gitee.com/yuanmomoya/open-source-project/tree/master/books-management-system GitHub项目地址:https://github.com/yuanmomoya/open-source-pro