Java反射实现DWR技术级联查询框的封装
来源:互联网 发布:miss的淘宝店网址 编辑:程序博客网 时间:2024/06/06 19:59
之前,本人分享过一篇关于级联搜索框查询的Beta版(尽管这种查询方式太不人性化,但是既然做了,就要有始有终)。链接如下:技术实现——联动菜单并保持数据的Demo。
在上面这篇文章中,只对技术的实现思路做了较为详细的讲解,并没有考虑它的实用性与通用性。同时,也由于本人于此的业务逻辑较少,所以并没有及时对它进行封装。延误至今,希望得到大家的谅解。
在上述Demo中,大家如果想要使用该功能,必须在后台做如下实现:
//注入对应服务private ICommonServiceBean evaluateInfoService;/** * @MethodName: getTeacherByCollegeId * @Description: 根据学院Id查询教师 * @param collegeId * @return */public String getTeacherByCollegeId(String collegeId) {String out = "";List<TeacherAllInfo> teachers = evaluateInfoService.findTeacherByCollegeId(collegeId);if (teachers != null && teachers.isEmpty()) {out = "[{\"id\":\"" + " " + "\",\"name\":\"" + "--请选择--" + "\"},";for (int i = 0; i < teachers.size(); i++) {out += "{\"id\":\"" + teachers.get(i).getTeacherId() + "\",\"name\":\""+ teachers.get(i).getTeacherName() + "\"},";}out = out.substring(0, out.length() - 1) + "]";}return out;}
上述代码是根据学院Id查询教师,如果想要实现根据教师Id查询课程功能,那么我们就要需要写一个与上述方法完全类似的方法,代码高度重复,且没有做到代码的复用。修改起来非常费劲,不利于统一管理。
下面是我做的封装。这个封装实现的中心思想是:利用了Java的反射机制,从泛型中取出Java对象。
private ICalendarServiceBean calendarService;//注入对应服务private ICommonServiceBean evaluateInfoService;/** * @MethodName: getChildByFatherId * @Description: 根据上级Id查询子级信息 * @param id 上级Id * @param evaluateInfoService 传入注入的服务 * @return 拼接完整的串 */public String getChildByFatherId(String id,ICommonServiceBean evaluateInfoService){return getChildByFatherId(id,evaluateInfoService,"id","name");}/** * @MethodName: getChildByFatherId * @Description: 根据上级Id查询子级信息 * @param id 上级Id * @param evaluateInfoService 传入注入的服务 * @param oId 实体中id属性名,默认为id * @param oName 实体中name属性名,默认为name * @return 拼接完整的串 */public String getChildByFatherId(String id, ICommonServiceBean evaluateInfoService,String oId,String oName) {String out = "";List<?> infoLists = evaluateInfoService.findTeacherByCollegeId(id);if (infoLists != null && infoLists.isEmpty()) {out = "[{\"id\":\"" + " " + "\",\"name\":\"" + "--请选择--" + "\"},";for (int i = 0; i < infoLists.size(); i++) {try {// 获取对象中名为“id”的元素Field ids = infoLists.get(i).getClass().getDeclaredField(oId);// 获取对象中名为"name"元素Field names = infoLists.get(i).getClass().getDeclaredField(oName);if (!ids.isAccessible()) {ids.setAccessible(true);}if (!names.isAccessible())// 判断该对象是否可以访问{names.setAccessible(true);// 设置为可访问}String strId = ids.get(infoLists.get(i)).toString();String strName = names.get(infoLists.get(i)).toString();out += "{\"id\":\"" + strId + "\",\"name\":\"" + strName + "\"},";} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (SecurityException e1) {e1.printStackTrace();} catch (NoSuchFieldException e1) {e1.printStackTrace();}out = out.substring(0, out.length() - 1) + "]";}}return out;}
有了这里的封装,我们在使用时只需要如下:
/** * @MethodName: getTeacherByCollegeId * @Description: 根据学院Id查询教师 * @param collegeId * @return */public String getTeacherByCollegeId(String collegeId) {return getChildByFatherId(collegeId,evaluateInfoService);}/** * @MethodName: getCourseByTeacherId * @Description: 根据教师Id查询课程信息 * @param teacherId * @return */public String getCourseByTeacherId(String teacherId) {return getChildByFatherId(teacherId, evaluateInfoService, "teacherId", "teacherName");}
以上就是我对后台实现的封装,对于前台JavaScript调用部分,你仍然可以自己做一下优化,写出更加漂亮的代码。
通过反射,我们就将不变的东西封装了起来,拥抱了变化。人家都说“反射反射,程序员的快乐。”今天,你快乐了吗?
2 0
- Java反射实现DWR技术级联查询框的封装
- DWR框架技术实现下拉动态级联
- JSP的那些事儿(4)----DWR实现级联 & JSP页面的查询
- 用Ajax技术和dwr框架两种方式实现下拉列表的级联效果
- DWR实现级联
- DWR实现级联
- DWR实现省市级联
- DWR实现省市级联
- 用DWR框架技术轻松实现动态级联菜单
- 用DWR框架技术轻松实现动态级联菜单
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- 反射3:利用java反射技术将查询结果封装成对象
- Java+Jquery实现的ajax技术对3级联动下拉框的实现
- 利用DWR实现级联菜单
- ssh+dwr实现级联操作
- JDBC_利用Java反射技术将查询结果封装为对象
- 基于DWR的Java数据封装类
- Dwr级联的小例子
- linux中TFTP配置
- SQL常用函数集锦
- 数据结构基础(12)------------Shell排序
- NYOJ88汉诺塔(1)
- AFNetworking(get)请求数据,(post)上传图片
- Java反射实现DWR技术级联查询框的封装
- Session的一些操作和注意点
- Session的生命周期
- HDOJ 4283 You Are the One
- Android从远程服务器下载文件到本地sd卡中
- NuttX 安装脚本
- 项目二。1
- Single Number
- C++知识点