srm开发(基于ssh)(3)
联系人管理
(1)客户和联系人一对多配置(重点)
(2)新增联系人
-新增功能实现
-Struts2实现文件上传
(3)联系人列表
-no session问题
(4)客户和联系人级联删除
联系人管理模块
1 客户和联系人关系
(1)客户和联系人是一对多关系
(2)客户:百度、新浪、阿里巴巴
联系人:百度里面有很多员工
新增联系人页面
//1 到新增联系人页面的方法
public String toAddPage(){
//1.1查询所有客户,把所有客户List集合传递到页面中显示(放到域对象)
//调用客户service里的方法
List<Customer> listCustomer = customerService.findAll();
ServletActionContext.getRequest().setAttribute("listCustomer",listCustomer); return "toAddPage";
}
添加联系人的方法
//2 添加数据到数据库的方法
public String addLinkMan(){
/**
* 可以封装联系人基本信息
* 但是有cid是客户id值不能直接封装的
* 把cid封装LinkMan实体类里面customer对象里面
*
*/
//原始方式实现
String scid = ServletActionContext.getRequest().getParameter("cid");
int cid = Integer.parseInt(scid); //创建customer对象
Customer c = new Customer();
c.setCid(cid);
linkMan.setCustomer(c);
return "addLinkMan";
}
添加联系人还可以这样做
<!-- 把域对象所有客户的list显示到下拉列表中 -->
<select name="customer.cid">
<c:forEach var="customer" items="${listCustomer }">
<option value="${customer.cid }">${customer.custName }</option>
</c:forEach>
</select>
name=customer.cid这样做也是可以的,就可以不用写上面的代码了,它的底层是用上面的代码实现的。
Struts实现文件上传
1 之前web阶段实现上传,使用组件FileUpload,使用 struts2实现文件上传,struts2对之前的FileUpload进行封装
2 如何对上传进行封装
(1)struts2里面使用拦截器对上传进行封装


(2)使用struts2框架方便实现文件上传
3 使用文件上传功能时,form表单要修改enctype属性
<FORM id=form1 name=form1
action="${pageContext.request.contextPath }/linkman_addLinkMan.action"
method=post enctype="multipart/form-data">

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

实现文件上传代码
//1 上传文件
//变量的名称需要和表单里面文件上传项的name值一样
private File upload; //2 上传文件名称 表单里面文件上传项的name值FileName
private String uploadFileName; //生成get和set方法
public File getUpload() {
return upload;
} public void setUpload(File upload) {
this.upload = upload;
} public String getUploadFileName() {
return uploadFileName;
} public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
} //2 添加数据到数据库的方法
public String addLinkMan() throws IOException{
//判断是否需要上传文件
if(upload != null){
//写上传代码
//在服务器文件夹里面创建文件
File serverFile = new File("F:/ssh_uploadfile"+"/"+uploadFileName);
//把上传文件复制到服务器文件里面
FileUtils.copyFile(upload, serverFile);
}
4 问题
如果上传文件超过2M,就会出现异常

页面中出现提示
没有input结果定义

(1)使用struts2做文件上传文件大小默认有限制的,默认2M
(2)可以设置上传文件大小
-struts2里面有常量,在struts.xml中进行常量配置,默认常量位置如下图所示:

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

struts常量
struts.multipart.maxSize
在struts.xml中修改该值
<!-- 设置上传文件大小 -->
<constant name="struts.multipart.maxSize" value="209715200"></constant>
(3)页面中input处理(上传文件大小可能会超过200M)

-input是struts2里面错误处理机制,如果上传文件超过设置的大小之后,自动返回结果,结果名称是input
-解决:配置input结果,到错误页面。
在响应的action配置如下所示:
<!-- 配置input结果 -->
<result name="input">/jsp/error.jsp</result>
联系人列表功能
1 查询所有的联系人,显示每个联系人所属的客户名称
<td>${linkman.customer.custName }</td>
no session问题

在web.xml中配置如下所示:
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter> <filter-mapping>
<filter-name>openSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2 修改数据
<input type="hidden" name="linkid" value="${linkman.linkid }"/>
利用隐藏项把联系人id传过来。
这是对联系人进行修改。
对客户进行修改时,联系人相应的客户也叫进行修改。如果没有修改,那么联系人的客户会为空。
客户和联系人级联删除
双向维护外键
1 hibernate外键双向维护
(1)在客户和联系人这两端都需要维护外键
(2)解决方式:让其中的一方放弃关系维护(让一的那一方放弃)
<!-- 表示客户所有联系人 -->
<set name="setLinkMan" inverse="true">
inverse默认值是false。
这样做了修改之后,客户修改之后,联系人客户也会进行修改。
2 删除客户后,联系人也删除
hibernate默认会将联系人的外键设为null,然后将再删除客户。
Hibernate:
update
t_linkman
set
clid=null
where
clid=?
Hibernate:
delete
from
t_customer
where
cid=?
把联系人外键设置为null。
要实现级联删除,只要添加属性cascade="delete"即可。
<!-- 表示客户所有联系人 -->
<set name="setLinkMan" cascade="delete">
进行修改之后,可以实现级联删除。
如果只有inverse="true"就会放弃关系维护,删除数据不会设置为null,会报错。
第一个,如果inverse属性值false,表示不放弃
1 删除客户之后,把客户所有的联系人也删除

把联系人外键设置null,删除客户。
第二个 如果inverse属性值true,删除客户时候,出现异常
(0)如果把inverse属性设置为true之后,不能直接删除有关数据,做级联删除,否则
报错如下所示:

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

srm开发(基于ssh)(3)的更多相关文章
- 基于ssh框架的在线考试系统开发的质量属性
我做的系统是基于ssh框架的在线考试系统.在线考试系统有以下几点特性:(1)系统响应时间需要非常快,可以迅速的出题,答题.(2)系统的负载量也需要非常大,可以支持多人在线考试(3)还有系统的安全性也需 ...
- 实现基于SSH的门票管理系统开发的质量属性
我要做的是一个基于SSH的门票售卖系统,在系统中常见的质量属性有:可用性.可修改性.性能.安全性.易用性. 可用性方面: 可用性是指系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况 ...
- 基于SSH框架的在线考勤系统开发的质量属性
我要开发的是一个基于SSH框架的在线考勤系统. 质量属性是指影响质量的相关因素,下面我将分别从6个系统质量属性(可用性,易用性,可修改性,性能,安全性,可测试性)来分析我的系统,以及如何实现这些质量属 ...
- 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现
基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...
- 基于SSH框架的网上书店系统开发的质量属性
基于SSH框架的网上书店系统开发的质量属性 对于我的基于SSH框架的网上书店系统的开发要实现的质量属性有可用性.可修改性.性能.安全性.易用性和可测试性. 1.对于可用性方面的战术: 可用性(Avai ...
- 基于SSH框架的学生公寓管理系统的质量属性
系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信 ...
- 基于ssh反向代理实现的远程协助
本文描述了怎么通过ssh反向代理实现远程协助,并提供了相关代码. 可满足web开启远程协助功能后,维护人员能够通过ssh和http登录客户机器(包括在nat环境下) web开启该功能后,ssh才能登录 ...
- 【Ansible】 基于SSH的远程管理工具
[Ansible] 参考文档:[http://www.ansible.com.cn/docs/intro.html] 和ansible类似的工具还有saltstack,puppet,sshpass等, ...
- 基于SSH的高校网上选课系统的质量属性的实现
我对于基于SSH的高校网上选课系统的质量属性的实现是从可用性.性能.安全性.可维护性.易用性五个方面进行的实现. 可用性方面: 实现方式:(1)当系统试图超出限制范围来进行课程查询或选课时必须进行错误 ...
- 基于SSH的网上图书商城-JavaWeb项目-有源码
开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 技术:Java:JSP:JDBC,struts2,spring,hibernate数据库: mysqlweb ...
随机推荐
- pro-select-like
DELIMITER | drop procedure if exists pro_query; CREATE PROCEDURE pro_query ( cname VARCHAR() ) BEGIN ...
- php 正则表达式二.基本语法
官方手册正则语法:http://php.net/manual/zh/reference.pcre.pattern.syntax.php 正则表达式在线测试工具:regexpal 正则表达式的匹配先后顺 ...
- Python列表切片详解([][:][::])
Python切片是list的一项基本的功能,最近看到了一个程序,里面有这样一句类似的代码: a = list[::10] 1 不太明白两个冒号的意思就上网百度,发现大多数人写的博客中都没有提到这一个用 ...
- django博客项目1.环境搭建
安装 Python Windows 下安装 Python 非常简单,去 Python 官方网站找到 Python 3 的下载地址,根据你的系统选择 32 位或者 64 位的安装包,下载好后双击安装即可 ...
- 去除MyEclipse 中新建servlet多余的注释问题
1.找到你的MyEclipse 的安装目录 2.点击文件位置,找到安装目录下的Common 文件夹下的plugins 3.找到com.genuitec.eclipse.wizards.jar 文件, ...
- cas添加验证码
cas添加验证码,折腾了好久,终于整理好了,很大部分都是借鉴http://binghejinjun.iteye.com/blog/1255293这个的.但是他的有一个很不好的地方就是不能提升验证码错误 ...
- 使用Berkeley Parser进行句法分析
一.句法分析 1.定义 句法分析判断输入的单词序列(一般为句子)的构成是否合乎给定的语法,并通过构造句法树来确定句子的结构以及各层次句法成分之间的关系,即确定一个句子中的哪些词构成一个短语,哪些词是动 ...
- go——接口(二)
多态是指代码可以根据类型的具体实现采取不同行为的能力. 如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值. 标准库里有很好的例子,如io包里实现的流式处理接口. io包提供了 ...
- 【工具】PC端调试手机端 Html 页面的工具
一.概述 有一个项目需要在手机端显示一个 web 页面,而每次把应用 launch 后,从手机端看比较麻烦,因此搜罗了几种在 PC 端调试手机端页面的工具. 二.工具 http://fonkie.it ...
- Codeforces Round #396 (Div. 2) A - Mahmoud and Longest Uncommon Subsequence B - Mahmoud and a Triangle
地址:http://codeforces.com/contest/766/problem/A A题: A. Mahmoud and Longest Uncommon Subsequence time ...