首页 > 编程 > Java > 正文

java二

2019-11-08 19:48:13
字体:
来源:转载
供稿:网友
第 3 章完成基础模块的开发一、通用类抽取(一)DAO接口及类通用部分抽取1.DAO 接口抽取(1)建立IBaseDao 接口,将IDepDao(部门列表接口)的内容拷贝到这个接口里,将实体类替换为T , 批量替换要注意,区分大小写.让IDepDao 继承自 IBaseDao,删除掉所有的方法北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90902.DAO 类抽取(1)创建BaseDao 继承自 HibernateDaoSupport类,将 DepDao 中的方法复制过来。(2)添加泛型T(3)替换类Dep 为 T ,dep 为 t(4) 将 getDetachedCriteria方法改为公有的空方法、 因为此方法里是对查询条件的构建,无法提取到父类,只能有子类去实现。(5)处理T.class 问题T 本身是泛型,是不能.class ,如何处理呢?我们可以先定义一个entityClass的属性然后,将T.class 替换为 entityClass北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090下面就是entityClass 如何构建了,我们写个构造方法,在方法体中写下列代码 Type type=getClass().getGenericSuperclass();//得到子类的class 的父一级 ClassParameterizedType ptype=(ParameterizedType)type;//可以得到泛型类型的TYPEType[] types= ptype.getActualTypeArguments();//得到所有泛型的类型entityClass=(Class<T>) types[0]; //取第一个泛型的类型BaseDao完成了,我们开始修改 DepDao修改继承父类为 BaseDao除getDetachedCriteria 之外的其它方法全部删除。修改 getDetachedCriteria 方法的访问修饰符为PRotected 或 public测试看是否成功吧?抽取之后的dao 是不是清爽很多呀!接着来!(二)Biz接口及类通用部分抽取1.Biz 接口抽取抽取后,修改IDepBiz, 删除所有方法,继承自 IBaseBiz2.Biz 类抽取先替换这部分北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090替换为下面代码, 改成父接口所有的depDao 改为 baseDao所有的Dep 改为 T ,所有的dep 变量改为 tBaseBiz 完成后,再修改 DepBiz北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090OK 了,测试一下吧。(三)action类通用部分抽取修改业务逻辑层接口的声明改成下列代码:把所有的depBiz 替换为 baseBiz添加泛型北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090替换所有的Dep 为 T dep 为 tget 方法里强转修改 write 的访问修饰符为 public我们再修改 DepAction 让其继承自 BaseAction ,并泛型实体测试一下,我们会发现列表 、删除 是可以用的,但是点修改,无法查询出数据是什么原因呢??北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090通过火狐浏览器 我们看一下 ,返回的json 变成了 t.name而我们的表单是我们把表单的name 修改为 t. 形式的试一试?测试 OK 了,我们把查询表单也修改一下(四)JS通用部分抽取1、在js 文件夹建立 crud.js, 在将JS 中代码复制到 crud.js 中,将可能变化的部分改为变量,替换 crud.js 中变量部分(1)修改页面,设置变量北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090(2)修改crud.js,替换变量替换URL 为如下形式其它的增删改的 URL 也参考此模式,替换 datagrid 的列定义:二、代码生成器(扩展)详见文档《代码生成器》北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090三、员工管理的完善(重点)(一)完善列表显示效果1.去掉密码列如图所示,密码出现在列表中不符合常理,应该去掉密码的显示(1)打开emp.html 删除下图红线一行。(2)刷新浏览器,看到此列已被删除。北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090虽然在页面上无法看到密码了, 但是输出json 的 action 还是可以看到密码数据的这是很不安全的,怎么办呢?我们可以通过 fastJSON 给我们提供的 JSONField注解的 serialize 属性控制是否对此列序列化。2.显示性别北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090我们看到表格中的性别显示0 和 1,可读性差,应该改为女和男。(1)打开emp.html,添加formatter(格式化器)(2)刷新浏览器,看到性别已经显示出来。3.日期的格式化显示为什么表格中的日期显示数字呢?我们看一下返回的JSON 串是什么样子的。北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090原来fastJSON 在生成 json 串时已经将日期转成数字,那么在表格中怎么将数字转换为日期呢?还是用到 formatter 。显示结果如下:显示结果是日期,但是不符合中国人的阅读习惯,所以需要将日期格式化。JS 本身没有提供对日期的格式化,我们需要引入 date.js 文件(别人写好的函数)<scripttype="text/javascript" src="js/date.js"></script>返回值部分调用Format 函数,传入格式显示结果如下:大功告成 :)北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90904.显示部门名称(1)建立关联修改Emp 类(实体类)修改映射文件 emp.hbm.xml 。删除原来的 depUuid 属性,添加关联关系在浏览器上测试,看到以下结果(2)修改emp.html 中修改部门一列的显示,添加 formmatter北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090在浏览器测试页面,结果如下:我们会发现有的地方为空,为什么呢??我们用浏览器调试一下json 的 url为发现一种奇怪的符号,$ref 这个是 fastJSON 生成关联的数据时产生的避免循环引用产生的符号,那如何让它生成正确的格式呢?我们在listByPage 和 list 方法生成 JSON 时加个参数SerializerFeature.DisableCircularReferenceDetect用来关闭循环引用,作用是去掉$ref 符号再次测试 json 的 url发现已经没有循环引用的符号了。测试一下页面北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090欧了!(二)员工数据编辑目前员工编辑功能只有文本框,我们下面将对性别、出生年月日、部门编号等列的输入方式。1.性别输入改为单选按钮修改emp.html 中性别测试结果:北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090简单吧~2.日期输入控件修改日期input 的 class 为 easyui-datebox看效果,感觉萌萌哒~~editable 为 false 则日期不可编辑3.部门下拉列表的实现北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090修改部门编号的input ,如下:效果简直没 sei 了!我们学习combobox ,最常用的属性是以下三个:valueField: 值的列名textField: 文本的列名url: 数据地址4.数据前端验证验证步骤:1、指定控件类型为validatebox2、指定验证规则 例如:data-options=”required:true”3、指定提示信息(可选)(1)让登陆名为必填项北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090我们经过测试,发现加了验证框后,没有通过验证也可以保存,原来验证控件需要与表单的validate 方法结合使用。form的 validate 方法用于判断表单的元素是否通过验证,返回布尔值,true表示都通过验证。我们修改crud.js 的 btnSave 的 click 事件,在前面加上下列代码:(2)添加email 验证(3)部门为必填(三)搜索功能1.去掉密码搜索, 添加性别搜索页面代码的实现北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090后端代码的实现,在EmpDao 类中的 getDetachedCriteria方法中添加条件2.出生年月日范围搜索页面的实现后端代码的实现在EmpDao 类中的 getDetachedCriteria方法中添加条件关于条件符号的说明:greater than 大于 简写 gtless than; 小于 简写 ltgreat than or equal to 大于等于 简写 ge北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090less than or equal to 小于等于 简写 le3.部门搜索在页面的条件表单添加下拉框后台代码的编写(四)json格式处理1.json 日期格式处理我们现在测试一下员工的修改功能,发现个奇怪的错误我们看有的字段可以显示出来,有的不能显示,是什么原因?我们打开测试浏览器测试json北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090会发现日期显示的是长整形,在我们将日期控件加上后,之后的属性值将不能写到表单里。怎么将json 返回的值显示为日期格式呢?我们修改 BaseAction 的 get 方法:再次测试json,会发现日期已变成带格式的。测试页面 大功告成!!!2.json 关联格式处理我们刚才解决了日期的显示问题,但是还有个问题没有解决,就是无法读取部门信息。北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090我们在浏览器测试json 的输出格式,关联部分如下图形式但是我们的页面上 name 属性是两个点连接的形式我们如果改成下图形式输出json,就可以解决这个问题了。如何解决呢?我们看一下BaseAction 的代码北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090get 方法调用了 mapJson 方法 , mapJson 方法的作用是循环 json 的每个 key 添加前缀,我们如果在循环中判断该对象是否是 Map 类型 ,如果是 Map类型则对其进行循环,添加到的新map 中,对key 进行拼接组合就可以得到上边的形式了。我们改写mapJson 方法北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090重新测试,OK!四、商品管理的完善(一)完善列表和搜索1.商品类型的显示思路:在商品实体建立多对一关联,关联商品类型(Goodstype)(1)修改实体类Goods(2)修改映射文件goods.hbm.xml(3)修改goods.html(4)测试结果北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90902.根据商品类型搜索修改查询表单,将商品类型改为下拉列表修改GoodsDao 的构建查询条件的方法3.范围搜索(学员实现)增加对进货价、出货价范围搜索,步骤参照1.3.2(出生年月日范围搜索)(二)完善商品编辑1.商品类型选择商品类型的URL北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090页面goods.html2.数值输入框precision 属性为小数位数,默认为0min 属性为最小值prefix:前缀字符3.数据前端验证(学员实现)(学员实现商品名称必须选择、商品名称必须填写)五、知识点总结(一)easyui北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-90901、格式化器:formatter的用法2、日期输入控件:easyui-datebox3、下拉框:easyui-combobox(重点)属性:url 远程的地址(输出json)valueField 提交的keytextField 下拉显示的key4、验证控件:easyui-validatebox属性:required 为 true表示必填validType 验证类型,为email 表示格式必须为email 方式missingMessage: 当文本框未填写时出现的提示信息invalidMessage:当文本框的内容被验证为无效时出现的提示5、form的 validate方法:校验表单的所有控件是否均已通过验证,返回 true表示所有控件均通过验证。6、numberbox :(数字框)precision 属性为小数位数,默认为0min 属性为最小值prefix:前缀字符(二)fastJSON对json 字符串进行日期格式化(三)Hibernate北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090多对一关联的配置.删除一的一方,会导致多的一方的列表数据无法显示。解决方案:(1)添加外键约束(2)建立级联删除
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表