移动公司开户和收费的项目总结:
1.批量修改和批量删除的重点
1.在批量删除里面,难得是如何将被选中的多选框(checkbox)按钮的值一次性的都拿出来,并传到后台中去。
-这里我们选择使用数组,后台的Controller层中,用一个String{] 或 Integer[] 等等数组来承载这些被选中的值
2.后台拿到这些值以后就好办了,直接在业务层(ServiceImpl)里面遍历,依次将数据库的这些值给删除了
1.批量修改就比批量删除来的有难度一些,因为是批量的修改,就不需要再从前台带值了,直接后台select * ,然后将这 个得到的对象集合放进Model 里。
2.有个地方不得不说的是我们的对象集合在后台中是集合,但是一旦传到前台的jsp页面中,就只能当做一个数组来处理 了,所有的获取值的方式按照数组的来就好了,不会出错的。
2. 界面空间的隐藏
1.这里的前台界面因为有超级管理员 和 普通的操作员 之分,所以要针对不同的权限用户显示不同的 可操作的内容。难道 写两个JSP 页面吗,那实在是太蠢了,我们的界面显示控件时有隐藏的属性的,我们完全可以先将属性设置为隐藏的,然 后 用个jQuery来判断,根据登录的用户的权限来开放不同的界面
2. 具体的属性是 <li id="item" style='display:none'></li> ----- > $("#item").show();就可以显示了
3.jQuery标签库导入时常出的毛病、
1.这个毛病就是:<script type="text/javascript" src="jQuery/jquery-1.8.3.min.js/>
这个乍一看好像没什么问题,可是运行的时候就是什么都不显示
2.只有改成这样才没有问题,我也不知道为什么,曾经一度困扰了我很久,我想应该是语法的问题吧
<script type="text/javascript" src="jQuery/jquery-1.8.3.min.js"></script>
4.SQL 语句经常犯的错
1.这写错应该只是我自己傻逼才会犯得。就是经常性的SQL语句的错误
- update table() set();
- insert into table values(xx=#{xx},yy=#{yy});// 你说傻不傻逼 正确的应该是 :values(#{xx},#{yy})
5.用过滤器解决了屡禁不止的乱码问题
1. 说道乱码,我本来还是很有心得的,因为曾经找了好几个小时的乱码原因,修修改改各种配置文件,但那都是之前写servlet时候的了,到了sprig MVC 乱码问题就比较麻烦了,以为jsp 页面有很多,不能每次都要设置编码和反编译把,那也太萨比了。
2.具体的方法挺简单的,springgmvc给我们内置了编码的过滤器,我们可以直接拿来用。
- 在web.xml 里配置<filter>和<filter-mapping>,用到的class是
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
6.异步交互
1.异步交互-ajax、好用又便宜的好东西,具体的文档详细内容在jQuery里,可以很详细的看到里面有好几种用法,下面介 绍我觉着的最常见最实用的
2. $.ajax({
type:"POST",
url:"${PageContext.request.ContextPath}/xxx.action",
data:"xx="+yy, // 如果要传递多个值的话: data:{"xx":yy,"mm":nn}
success:function(msg){
...
}
});
3. 异步交互中,传进来集合,到jsp里就变成了数组,我们可以在这里面做节点的添加,这样就可以动态的根据数据库的记录来动态地显示数据。
7. 关于SQL查询中,如果没查询到值不返回null的问题 – 可以用 isEmpty() 方法 试试
1. 在真正的数据库操纵界面,例如 Navicat,就会发现如果没查到东西好像会显示一个空的记录,但是在mapper里面却什 么值也不返回,
2. 所以如果想用这本以为会返回的null来做if的判断就要小心了,会报错。可以在service层做处理,使其返回null。
8. jQuery中,从后台Controller层传过来的null,到了web层的 jsp 里面,会发生奇妙的变化,
null会被自动转换成0,做判断的时候要注意。
9. input 文本框 date 属性的写入 与回显的问题
1.我们现在做注册的时候经常避免不了会用到时间,时候 <input type="date" > 的很有用,但是他的 写入 和 回显 比 较麻烦
2.写入后台: 这里我们要配置 initBinder,利用 webDateBinder 来对时间进行封装,处理后才能在后台拿到这个date 的值,不然会报400 的错误,欺骗性路由啥的错误
3.数据回显: 简单点说就是给这个文本框赋值,让他显示出时间,一般的赋值可以直接用Date的时间就行了,不过要将其 格式转换成(yyyy-MM-dd),如果是将bean对象里的时间回显的话,就需要在 bean 的属性 或者 get方法
上加上一个注解 : @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
10.文件上传
1.导入两个jar包,commons-io.jar 和 commons-fileupload.jar
2.上传文件的三个必要条件:
- form 提交方式是post
- 文本框type 必须是 file
- form 有个属性 entrytype="multityPart/form-data"
3.在 application-mvc.xml 中要进行 文件上传的 配置 , CommonMultiPartResolver,可以设置他的最大文件上传大小和编码格式等等
4.记得要配置 虚拟的图片服务器 ,在配置Tomcat的界面," / + 项目名" 的那个地方 配置
5.后台接受文件是用的 MultipartFile xxfile,来接收的。
6.写入指定位置; xxfile.transferTo(file); file 是 : File file = new File(path+新的文件名);
11.spring 的异常解析器
- 处理web项目运行时的异常处理问题,注意最好是在项目做完在弄这个,不然前面的错误信息会被自己写的覆盖,查错比较难受。
1.先在 pojo 层里,创建一个自定义的异常类,例如CustomerException(要继承Exception)
2.在web层,创一个 exception 的包,里面新建一个自定义的异常解析处理器,
例如:CustomerHandlerExceptionResolver (要实现 HandlerExceptionResplver 接口)
在这里面设置处理异常的模块。
3.在 application-mvc.xml 里面注册我们的异常解析器
<bean class="cn.qphone.ssm.web.exception.CustomberHandlrExceptionResolver"/>
12. spring mvc的拦截器
- 拦截器和过滤器相似,但是他只能拦截controller层的资源,比如能拦截xx.action等,但 jsp的东西拦截不了
1. 要现在application-mvc.xml 里 注册全局的拦截器 <mvc:interceptors>
2. 然后在配置拦截器要实现的接口(HandlerInterceptor)或者是继承的类(HandlerInterceptorAdaptor)(常用)