联系人管理

(1)客户和联系人一对多配置(重点)

(2)新增联系人

-新增功能实现

-Struts2实现文件上传

(3)联系人列表

-no session问题

(4)客户和联系人级联删除

联系人管理模块

1 客户和联系人关系

(1)客户和联系人是一对多关系

(2)客户:百度、新浪、阿里巴巴

   联系人:百度里面有很多员工

新增联系人页面

  1. //1 到新增联系人页面的方法
  2. public String toAddPage(){
  3. //1.1查询所有客户,把所有客户List集合传递到页面中显示(放到域对象)
  4. //调用客户service里的方法
  5. List<Customer> listCustomer = customerService.findAll();
  6. ServletActionContext.getRequest().setAttribute("listCustomer",listCustomer);
  7.  
  8. return "toAddPage";
  9. }

添加联系人的方法

  1. //2 添加数据到数据库的方法
  2. public String addLinkMan(){
  3. /**
  4. * 可以封装联系人基本信息
  5. * 但是有cid是客户id值不能直接封装的
  6. * 把cid封装LinkMan实体类里面customer对象里面
  7. *
  8. */
  9. //原始方式实现
  10. String scid = ServletActionContext.getRequest().getParameter("cid");
  11. int cid = Integer.parseInt(scid);
  12.  
  13. //创建customer对象
  14. Customer c = new Customer();
  15. c.setCid(cid);
  16. linkMan.setCustomer(c);
  17. return "addLinkMan";
  18. }

添加联系人还可以这样做

  1. <!-- 把域对象所有客户的list显示到下拉列表中 -->
  2. <select name="customer.cid">
  3. <c:forEach var="customer" items="${listCustomer }">
  4. <option value="${customer.cid }">${customer.custName }</option>
  5. </c:forEach>
  6. </select>

name=customer.cid这样做也是可以的,就可以不用写上面的代码了,它的底层是用上面的代码实现的。

Struts实现文件上传

1 之前web阶段实现上传,使用组件FileUpload,使用 struts2实现文件上传,struts2对之前的FileUpload进行封装

2 如何对上传进行封装

(1)struts2里面使用拦截器对上传进行封装

(2)使用struts2框架方便实现文件上传

3 使用文件上传功能时,form表单要修改enctype属性

  1. <FORM id=form1 name=form1
  2. action="${pageContext.request.contextPath }/linkman_addLinkMan.action"
  3. method=post enctype="multipart/form-data">

* 还有一个变量,上传文件的mime类型
* 服务器只认扩展名所对应的mime类型

实现文件上传代码

  1. //1 上传文件
  2. //变量的名称需要和表单里面文件上传项的name值一样
  3. private File upload;
  4.  
  5. //2 上传文件名称 表单里面文件上传项的name值FileName
  6. private String uploadFileName;
  7.  
  8. //生成get和set方法
  9. public File getUpload() {
  10. return upload;
  11. }
  12.  
  13. public void setUpload(File upload) {
  14. this.upload = upload;
  15. }
  16.  
  17. public String getUploadFileName() {
  18. return uploadFileName;
  19. }
  20.  
  21. public void setUploadFileName(String uploadFileName) {
  22. this.uploadFileName = uploadFileName;
  23. }
  24.  
  25. //2 添加数据到数据库的方法
  26. public String addLinkMan() throws IOException{
  27. //判断是否需要上传文件
  28. if(upload != null){
  29. //写上传代码
  30. //在服务器文件夹里面创建文件
  31. File serverFile = new File("F:/ssh_uploadfile"+"/"+uploadFileName);
  32. //把上传文件复制到服务器文件里面
  33. FileUtils.copyFile(upload, serverFile);
  34. }

4 问题

如果上传文件超过2M,就会出现异常

页面中出现提示

没有input结果定义

(1)使用struts2做文件上传文件大小默认有限制的,默认2M

(2)可以设置上传文件大小

-struts2里面有常量,在struts.xml中进行常量配置,默认常量位置如下图所示:

文件中设置文件上传大小具体位置如下。

struts常量

  1. struts.multipart.maxSize

在struts.xml中修改该值

  1. <!-- 设置上传文件大小 -->
  2. <constant name="struts.multipart.maxSize" value="209715200"></constant>

(3)页面中input处理(上传文件大小可能会超过200M)

-input是struts2里面错误处理机制,如果上传文件超过设置的大小之后,自动返回结果,结果名称是input

-解决:配置input结果,到错误页面。

在响应的action配置如下所示:

  1. <!-- 配置input结果 -->
  2. <result name="input">/jsp/error.jsp</result>

联系人列表功能

1 查询所有的联系人,显示每个联系人所属的客户名称

  1. <td>${linkman.customer.custName }</td>

no session问题

在web.xml中配置如下所示:

  1. <filter>
  2. <filter-name>openSessionInViewFilter</filter-name>
  3. <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
  4. </filter>
  5.  
  6. <filter-mapping>
  7. <filter-name>openSessionInViewFilter</filter-name>
  8. <url-pattern>/*</url-pattern>
  9. </filter-mapping>

2 修改数据

  1. <input type="hidden" name="linkid" value="${linkman.linkid }"/>

利用隐藏项把联系人id传过来。

这是对联系人进行修改。

对客户进行修改时,联系人相应的客户也叫进行修改。如果没有修改,那么联系人的客户会为空。

客户和联系人级联删除

双向维护外键

1 hibernate外键双向维护

(1)在客户和联系人这两端都需要维护外键

(2)解决方式:让其中的一方放弃关系维护(让一的那一方放弃)

  1. <!-- 表示客户所有联系人 -->
  2. <set name="setLinkMan" inverse="true">

inverse默认值是false。

这样做了修改之后,客户修改之后,联系人客户也会进行修改。

2 删除客户后,联系人也删除

hibernate默认会将联系人的外键设为null,然后将再删除客户。

  1. Hibernate:
  2. update
  3. t_linkman
  4. set
  5. clid=null
  6. where
  7. clid=?
  8. Hibernate:
  9. delete
  10. from
  11. t_customer
  12. where
  13. cid=?

把联系人外键设置为null。

要实现级联删除,只要添加属性cascade="delete"即可。

  1. <!-- 表示客户所有联系人 -->
  2. <set name="setLinkMan" cascade="delete">

进行修改之后,可以实现级联删除。

如果只有inverse="true"就会放弃关系维护,删除数据不会设置为null,会报错。

第一个,如果inverse属性值false,表示不放弃

1 删除客户之后,把客户所有的联系人也删除

把联系人外键设置null,删除客户。

第二个 如果inverse属性值true,删除客户时候,出现异常

(0)如果把inverse属性设置为true之后,不能直接删除有关数据,做级联删除,否则

报错如下所示:

(1)在根据客户删除联系人,在客户的映射文件中配置,cascade值delete.

(2)规范写法

srm开发(基于ssh)(3)的更多相关文章

  1. 基于ssh框架的在线考试系统开发的质量属性

    我做的系统是基于ssh框架的在线考试系统.在线考试系统有以下几点特性:(1)系统响应时间需要非常快,可以迅速的出题,答题.(2)系统的负载量也需要非常大,可以支持多人在线考试(3)还有系统的安全性也需 ...

  2. 实现基于SSH的门票管理系统开发的质量属性

    我要做的是一个基于SSH的门票售卖系统,在系统中常见的质量属性有:可用性.可修改性.性能.安全性.易用性. 可用性方面: 可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况 ...

  3. 基于SSH框架的在线考勤系统开发的质量属性

    我要开发的是一个基于SSH框架的在线考勤系统. 质量属性是指影响质量的相关因素,下面我将分别从6个系统质量属性(可用性,易用性,可修改性,性能,安全性,可测试性)来分析我的系统,以及如何实现这些质量属 ...

  4. 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现

    基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...

  5. 基于SSH框架的网上书店系统开发的质量属性

    基于SSH框架的网上书店系统开发的质量属性 对于我的基于SSH框架的网上书店系统的开发要实现的质量属性有可用性.可修改性.性能.安全性.易用性和可测试性. 1.对于可用性方面的战术: 可用性(Avai ...

  6. 基于SSH框架的学生公寓管理系统的质量属性

    系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信 ...

  7. 基于ssh反向代理实现的远程协助

    本文描述了怎么通过ssh反向代理实现远程协助,并提供了相关代码. 可满足web开启远程协助功能后,维护人员能够通过ssh和http登录客户机器(包括在nat环境下) web开启该功能后,ssh才能登录 ...

  8. 【Ansible】 基于SSH的远程管理工具

    [Ansible] 参考文档:[http://www.ansible.com.cn/docs/intro.html] 和ansible类似的工具还有saltstack,puppet,sshpass等, ...

  9. 基于SSH的高校网上选课系统的质量属性的实现

    我对于基于SSH的高校网上选课系统的质量属性的实现是从可用性.性能.安全性.可维护性.易用性五个方面进行的实现. 可用性方面: 实现方式:(1)当系统试图超出限制范围来进行课程查询或选课时必须进行错误 ...

  10. 基于SSH的网上图书商城-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 技术:Java:JSP:JDBC,struts2,spring,hibernate数据库: mysqlweb ...

随机推荐

  1. python相关的报错处理

    1.python3.6编译安装完毕后,使用pip3安装virtualenv,提示找不到ssl模块 原因:因为我们少装了openssl-devel依赖包,所以导致编译后的pip3无法找到ssl模块. 解 ...

  2. Struts 2.0 入门

    1. Struts2.0 概述 Struts 2.0 是以 WebWork 为核心,采用拦截器的机制来处理用户的请求; Struts 2.0 是一个基于 MVC 设计模式的 Web 层框架; Stru ...

  3. 正则表达式 \b

    引用网上一段话: \b 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处.虽然通常英文的单词是由空格,标点符号或者换行来 ...

  4. Django - 回顾(2)- 中介模型

    一.中介模型 我们之前学习图书管理系统时,设计了Publish.Book.Author.AuthorDetail这样几张表,其中Book表和Author表是多对多关系,处理类似这样简单的多对多关系时, ...

  5. 安全技能树简版 正式发布——BY 余弦(知道创宇)

    之前留意到知道创宇发布的<知道创宇研发技能表>,对自己有很大的启发,最近听说知道创宇的余弦大神创业了(题外话),还发布了<安全技能树简版V1>,仔细研读之后总体感觉不那么复杂了 ...

  6. oracle入门(3)——oracle服务解释

    [本文介绍] oracle不像mysql,安装后之后一个服务,如果mysql连接不上,打开其服务就行.oracle是有多个服务,哪些服务要开,哪些服务没必要开,对新手来说未必不是一个难点.下面对ora ...

  7. DBA学习参考绝佳资料

    原文来自:pursuer.chen 原文地址:https://www.cnblogs.com/chenmh/default.aspx?page=1 [置顶]MongoDB 文章目录 2018-02-0 ...

  8. sql server等待类型

    sql server 各种等待类型-转 sql server各个等待类型及解决办法:https://www.sqlskills.com/help/waits/writelog/其他等待类型的描述和解决 ...

  9. Codeforces Round #468(div2)

    A Friends Meeting 题意:有两个人在数轴上的不同位置,现在他们需要到一个位置碰面.每次每人只能向左或向右走1个单位,轮流进行.每个人第一次走时疲劳度+1,第二次走时疲劳度+2,以此类推 ...

  10. redis的一些命令

    字符串操作 EX在设置值的时候设置过期时间,ttl查看过期时间 expire能单独设置过期时间 查看所有的key key * 列表操作 lpush从列表左边添加值,rpush从列表右边添加值 lran ...