首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

转:传智播客-OA(2)

2012-10-15 
转:传智播客--OA(二)1. 完成DepartmentDaoImpl各个方法的实现;这些都是固定方式; 唯一不同的是使用了Hiber

转:传智播客--OA(二)
1. 完成DepartmentDaoImpl各个方法的实现;这些都是固定方式;
唯一不同的是使用了HibernateDaoSupport.getHibernateTemplate()代替以前的
  getSessionFactory().getCurrentSession()来完成增删改查工作;
使用它和事务管理的配置有关系;
save(), update(), delete(), get(),
-- save() 使用了persist代替save
-- update() 使用merge代替update
-- delete() 参数使用Integer代替int;
  使用了load(它与get有点区别)
-- get()
-- getList()
  使用了find直接查询;from Wrdepartment order by deptId;

来源:(http://blog.sina.com.cn/s/blog_5ecfe46a0100dl0k.html) - 传智播客--OA(二)_hhl_bj_新浪博客

*** 总结:DAO实现的固定模式
  (1) 完成DAOImpl的增删改查功能,一般就5个基本函数;
  (2) 抽取成DAO接口;
 
*** 总结:DAO层操作数据库;
  (1) 一般肯定需要dataSource;直接配置;
  (2) 事务管理由Spring提供,直接配置;
  (3) 使用了Hibernate就要配置SessionFactory;
 
2. 完成DepartmentServiceImpl各个方法的实现,这些也是固定模式,实现同DAO;

-- 关于异常处理:
  DAO层不抛出,Service层不抛出;--- 是否以后调整?不明白;
 
-- 关于事务管理
  把事务管理放在了Service层了; -- 需要确认一下,是这里,还是DAO那里;
 
-- 关于注释
  放在接口的定义中,而不是实现类中;

** 总结:Service实现的固定模式:
  (1) 引进DAO接口;使用set方法实现依赖注入;
  (2) Service层的方法基本上与DAO的方法一一对应,直接通过DAO接口调用它的方法;
 
 
3. 测试;从Service层测试;
最主要是为了测试Spring的注入和事务管理是否正常;



4. 整合Struts: Struts1.3.8
(1) jar包;
(2) WEB-INF/struts-config.xml;
  -- 使用Spring的控制器;
(3) WEB-INF/web.xml
  -- Struts就是配置一个Servlet:可以去文档或Exampleszhong去找;
  -- Spring的beans.xml;Spring容器的配置;
   这里是在web.xml中配置;容器使用了Application监听器,由Spring实现;
   官方文档提供了在struts-config.xml中配置的方法:15.4.1,需要测试一下;*********
  -- Spring有解决乱码问题的过滤器;
  -- Spring提供了OpenSessionInViewFilter;
(4) 采用Spring以bean的方式来管理Action:需要使用DelegatingRequestProcessor替换Struts的RequestProcessor;
  官方文档还提供了第二种方法:继承Spring提供的ActionSupport类; 15.4
 

5. 完成Web层(Struts)的Action: DepartmentAction extends DispatchAction

(1) cn.itcast.base.dao.DepartmentAction
(2) execute() : 可能是一个方法判断请求参数;
(3) /base/department/list.jsp(复制,修改);
(4) Spring来管理action:
  -- struts.config.xml中按正常的struts配置方法来配置;
  -- spring的beans.xml则配置一个aciton对应的bean,使用name取代id(有特殊字符)
  jsp -> <action path="/department">(Struts-config.xml) -> <bean name="/department">(beans.xml);
(5) add.jsp的处理方法:
  -- 打开,显示大小;
   function GoAdd() {
    window.open("add.jsp");
   }
  -- 每次打开都是一个新的页面,如何解决?
  -- 每次保存add.jsp数据时,都要对输入的数据进行js判断,代码量太大;
   解决:单独抽取js到一个页面;
  -- 判断字段为空?*** 提供了写好的js代码库
   不允许为空的,参数最小值为1,允许为空的,参数最小值为0 
  -- Struts的Form与实体Entity的很多属性重复,而且经常要在2者之间复制;
   以前的bbs使用的BeanUtils来实现属性的复制;
  -- add.jsp这个小窗口的关闭
   action 结束前,request属性存一个flag属性;使用js可以反问;
    var flag = '${flag}'; 
    window.close();
  -- 如何在添加结束后,刷新页面,也就是list.jsp;  
  -- 使用<c:forEach>生成全部的内容;
  -- 乱码问题的解决:
   -- action中检查传过来的中文有没有问题?正确;
   -- 检查Spring的过滤器;
   -- 问题:jdbc.properties
    useUnicode=true&atmp&characterEncoding=UTF-8
    "&atmp"不能要;
    主要是这里写在了properties中去了;
    以前是写在spring的配置文件beans.xml中,所以需要"&atmp"
   -- mysql的ini(57)的字符集,默认为latin1,与本次乱码无关;
  -- 解决添加结束后,刷新页面,直接可以看到最新的数据:
   add.jsp增加结束后在关闭js代码中;
    这行代码不行:window.location.href="${pageContext.request.contextPath}/department.do?act=list";
    使用这个:opener.document.location="...";
    *** 需要查找一下这两种用法的区别;
 
(6) mod.jsp与修改功能(对add.jsp的复制,修改)
  -- 修改的流程与add有所不同,因为要先取到数据;
  -- 增加一个隐藏的deptId属性,来保存修改的部门的id; itcastbbs常用;
  -- action中使用editUI和edit两个方法来共同完成修改功能;

(7) show.jsp与查看功能(对add.jsp和mod.jsp两个模块的复制和修改)
  -- 测试中发现需要改进的问题
   简介太长的时候应该简短输出;
   文字应该是静态的;有跑马灯的效果出现;
  *** 显示的时候不要显示主键,主键是自动增长的,直接使用行号,C:forEach可以很方便的实现;
  
(8) 删除功能
  使用Js实现;
   document.Form1.action="...deptId=deptId";
  然后在Action中增加上面的aciton方法delete;
  将以前的添加后的js代码改为:
   document.location.href="...";
  
  再改:
   Form1.action="";
   Form1.btnDelete.click();
  增加删除前的提示
   if ( confirm("") ) {delete}

(9) 批量删除:
  **** 把这个抽取出来单独做一个js学习的例子;
  -- 全选:CheckAll();
   -- getElementsByTagName_r("INPUT") : 获取全部的复选框;
    objs[i].type.toLowerCase() == "checkbox" : 判断是否为chekbox;
     objs[i].checked = event.srcElement.checked;   : 判断复选框是否选中;
  -- 检查批量删除的部分选中: CheckSelOnle()
   -- 基本代码和全选差不多;
    多增加一些判断;
   
  -- 增加,删除,修改等结束后返回页面时的js代码:
   flag的显示 
   
   
   
   
----------------------------- 讨论 ---------------------------------
=== 提示信息的硬编码问题:
(1) Java代码中最好不要出现中文;
  -- 使用cn.itcast.common.CommonTools定义了一些常量;
  -- 也可以使用properties文件完成;


=== C3P0与DBCP的使用:
****(1) 使用C3P0代替DBCP的使用;

=== 登录模块
(1) 如果先做,屏蔽Session;
(2) 后做;
(3) 实际开发,登录后做;
(4) 大量的增删改查需要服务器重启和登录,这会导致时间的浪费;



=== 引进整个页面的框架;
  -- jsp放在哪里都安全,关键是编码的质量;
  -- OA这里就没有将jsp页面放在WEB-INF里面;
(1) sys.jsp:
  使用了frameset实现整个的页面框架;
  总体上分为上下2部分;top.jsp, index.jsp;
(2) index.jsp
  table , iframe
  left.jsp / info.do
  主要记住左右两边的名字:
(3) js / css文件复制;

热点排行