如何将多个columnProperties(字段)添加到ColumnBuilder?

时间:2016-04-29 16:37:52

标签: java jasper-reports dynamic-jasper

我使用以下代码在jasper报告中显示列属性。但我无法将三个属性值转换为单列。是否有可能在一列中使用“,”显示三个属性。

该文件包含以下代码:

DynamicReportBuilder drb = new DynamicReportBuilder();
drb.setTitle("Transaction List Export")
                .setSubtitle("This report was generated at " + new Date())
                .setDetailHeight(15)                    // defines the height for each record of the report
                .setPrintColumnNames(true)
                .setIgnorePagination(true)              // for Excel, we may don't want pagination, just a plain list
                .setMargins(30, 20, 0, 15)              // define the margin space for each side (top, bottom, left and right)
                .setDefaultStyles(titleStyle, subtitleStyle, headerStyle, detailStyle)
                .setColumnsPerPage(1, 10)
                .setUseFullPageWidth(true)              // we tell the report to use the full width of the page. this resizes
                                                        // the columns width proportionally to meat the page width.
                .setAllowDetailSplit(false)
                .setReportName("Client List");
AbstractColumn columnClientLocation = ColumnBuilder.getNew()
                .setColumnProperty("ClientAddress", String.class.getName()+Constants.COMMA)
               .setColumnProperty("ClientCity",String.class.getName()+Constants.COMMA)
                setColumnProperty("ClientPostalCode",String.class.getName())
                .setTitle(messages.getMessage(locale, "group.terminalinfo"))
                .setWidth(80)
                .build();
                width = width + 80;

            /**
             * We add the columns to the report (through the builder) in the
             * order we want them to appear
             */
            if(myContainer.getServiceProvider().equalsIgnoreCase("GOOG")) {
                drb.addColumn(columnTransactionActivity)
                    .addColumn(columnClientLocation);
            }

我无法在一个jasper报告列中获得ClientAddressClientCityClientPostalCode的值。

我想在一列中显示所有这三个属性。

1 个答案:

答案 0 :(得分:1)

您可以使用","您需要使用CustomExpression来获得所需的结果

示例

首先将您的字段添加到报告中,以便可以访问它们

drb.addField("ClientAddress", String.class.getName());
drb.addField("ClientCity", String.class.getName());
drb.addField("ClientPostalCode", String.class.getName());

然后使用AbstractColumn

创建CustomExpression
AbstractColumn columnClientLocation = ColumnBuilder.getNew().setCustomExpression(
    return new CustomExpression() {
        public Object evaluate(Map fields, Map variables, Map parameters) {
            String clientAddress = (String) fields.get("ClientAddress");
            String clientCity = (String) fields.get("ClientCity");
            String clientPostalCode = (String) fields.get("ClientPostalCode");
            return clientAddress + ", " + clientCity + ", " + clientPostalCode;
        }

        public String getClassName() {
            return String.class.getName();
        }
    }
).build();