微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

利用java反射动态调用方法,生成grid数据

项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前台页面需要调整字段顺序或者增加一个字段、删除一个字段时,后台需要修改java代码。经过一上午的重构努力,改为数据库配置字段与字段对应方法,java利用反射动态调用对象方法从而获取字段值,拼接为list传递给前台。这样修改后,代码干净整洁,非常灵活,只要是对象中存在的方法,可以在数据库中任意配置显示与否、显示顺序等,现在分别介绍下实现过程:

一、数据库定义

 
CREATE TABLE `IS_WEB_TABLECONF`  (
  `guid` bigint(20) NOT NULL,
  `columnname` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--字段在页面显示名称
  `language` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--字段的反射方法
  `columnmethodname` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `orderstr` int(10) DEFAULT NULL,--字段在页面显示顺序

  `tablename` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--表单名称
  `modulename` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,--模块名称
  PRIMARY KEY (`guid`) USING BTREE
) ENGINE = InnoDB CHaraCTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of IS_WEB_TABLECONF
-- ----------------------------
INSERT INTO `IS_WEB_TABLECONF` VALUES (1,‘公司名称:‘,‘zh-ch‘,‘getBranchName‘,1,b‘0‘,23,‘2019-09-18 10:44:32‘,‘2019-09-18 10:44:30‘,12,‘WebInstallation‘,‘BaseInfo‘);
INSERT INTO `IS_WEB_TABLECONF` VALUES (2,‘初始分公司:‘,‘getProtocolStartDate‘,2,345,‘2019-09-18 10:45:48‘,‘2019-09-18 10:45:50‘,4,‘BaseInfo‘);
 
二、java中根据不同模块查询对应的表格定义,组装数据
 
private void getListInfo(String licenseClassName,List qualifyList,Object dto,String qualifyInfo) {
//licenseClassName需要反射对象的类路径名称,如:
"com.neuxa.is.isinterface.fm.dto.IsSlInstallationunitReviewDto"
//dto是查询好带有数据信息的对象实体

List<IsWebTableconfdto> tableConfQua = dictionaryUtil.getTableConf("WebInstallation",qualifyInfo);
for (IsWebTableconfdto confdto : tableConfQua) {
JSONObject object = new JSONObject();
object.put("key",confdto.getColumnname());
String value = "";
value = getInvokeMethodValue(licenseClassName,confdto.getColumnmethodname(),dto);
object.put("value",value);
qualifyList.add(object);
}

private String getInvokeMethodValue(String classBeanName,String methodName,Object curDto){    String value="";    try {        Class<?> clazz = Class.forName(classBeanName);        Method method = clazz.getDeclaredMethod(methodName);        method.setAccessible(true);        Object invoke = method.invoke(curDto);        value=invoke.toString();    }catch(Exception e){        e.printstacktrace();    }    return value;}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐