加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 07:43:41 所属栏目:Java 来源:网络整理
导读:项目中需要java后台查询并组装前台grid的数据,数据行数不定,数据行定义不定,开始用了最原始的方法,写了几百行,就是前台需要什么字段后台拼接什么字段,java代码冗余量非常大,并且不够灵活,一旦前台页面需要调整字段顺序或者增加一个字段、删除一个字

项目中需要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;}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读