zoukankan      html  css  js  c++  java
  • 利用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, '初始分公司:', 'zh-ch', 'getProtocolStartDate', 2, b'0', 345, '2019-09-18 10:45:48', '2019-09-18 10:45:50', 4, 'WebInstallation', '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;
    }
  • 相关阅读:
    JSP 072: 处理注册结果样式的显示
    JSP 07: 开发注册页面
    JSP 06: 两个内置对象request和response
    Java Web 01: 什么是http协议
    JSP 05: JSP定义表达式和内容输出表达式
    JSP 04: 如何在JSP页面中书写Java代码
    JSP 03: 创建一个JSP页面并启动运行项目
    Fail 02: Port 8080 required by Tomcat Server at localhost is already in use.
    Fail 03: netstat 不是内部或外部命令
    Build 01: 安装新的JDK
  • 原文地址:https://www.cnblogs.com/DylanZ/p/11541557.html
Copyright © 2011-2022 走看看