java - 如何在JasperReports中使用Map作为数据集元素?

标签 java jasper-reports

我正在向 Jasper 传递一个参数,它是一个 map 集合。我想使用这个集合作为表的数据集。

如果我有一个普通 Java 对象的集合,我会这样做:

$F{description}

获取字段。我想做这样的事情:

get(description)

values().get(1)

是否可以在这样的表中检索 map 值?

最佳答案

由于我确实想保持服务通用,所以我决定使用 Javassist 进行动态类创建。这是一个丑陋的解决方案,但至少它有效。

    HashMap<String, Object> element = (HashMap<String, Object>) ((ArrayCollection) v).get(0);
    ClassPool pool = ClassPool.getDefault();
    CtClass ctClass = pool.makeClass("Dynamic"+System.currentTimeMillis());
    element.keySet().forEach(s -> {
    try {
    //need only Strings
    ctClass.addField(CtField.make("public String "+s+";", ctClass));
    ctClass.addMethod(CtMethod.make("public String get" + StringUtils.capitalize(s) + "() { return " + s + "; }", ctClass));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
    Class clazz = ctClass.toClass();
    ArrayList<Object> objects = new ArrayList<>();
    ((Collection) v).forEach(m -> {
        HashMap<String, Object> hm = (HashMap<String, Object>) m;
        try {
            Object obj = clazz.newInstance();
            element.keySet().forEach(s -> {
                try {
                    obj.getClass().getDeclaredField(s).set(obj, hm.get(s));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
        objects.add(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    });
    parameters.put(k, new JRBeanCollectionDataSource(objects));

关于java - 如何在JasperReports中使用Map作为数据集元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402463/

相关文章:

java - 无法找到 Jasper Report (.jrxml) 源路径

java - oracle.jdbc.pool.OracleDataSource 为每个新连接运行一个命令

java - AWT XOR SWING 在一个应用程序中一起使用?

java - Jackson json 映射和驼峰键名称

java - 如果缺少 PDF 字体,为什么 jasper 报告不抛出 JRFontNotFoundException?

mysql - 在 iReport 中使用多个表格

mysql - JasperReports 俱乐部联盟结果成一行

java - 有没有办法在关闭时使用 ContextListener 关闭 contextDestroyed() 方法中的所有 ThreadLocals(保存 Session 对象)?

java - Mapview fragment 类型不匹配错误

java - 条形图设置值轴增量