Отчеты Jasper: Как вызвать метод java с параметром int из класса JasperDesign - PullRequest
1 голос
/ 08 октября 2010

Я использовал jasper без использования xml (я должен все еще изменить это), но у меня есть реализация JasperDesign, которую я использую ... Я создаю JRDesignTextField с JRDesignExpression,

Я хотел бы настроить выражение так, чтобы я мог заставить jasper вызывать метод для каждого элемента в JRBeanCollectionDataSource с целочисленным параметром ... В настоящее время я могу вызывать только методы, которые возвращают значение и не принимают аргументов. Выражение для этого показано ниже:

final JRDesignExpression exp = new JRDesignExpression (); exp.setValueClass (String.class); exp.setValueClassName (String.class.getName ()); exp.addFieldChunk ( "column0");

Ответы [ 3 ]

1 голос
/ 10 октября 2010

Вам следует рассмотреть возможность использования другого источника данных, отличного от JRBeanCollectionDataSource. JRBeanCollectionDataSource вызывает методы getter для каждого поля, чего вы хотите избежать.

Вы можете использовать JRMapCollectionDataSource, который создается из коллекции карт. Вы можете называть ключи своих карт по своему желанию, например, «column0», «column1» (или просто «0», «1» и т. Д.)

Другим вариантом является непосредственная реализация интерфейса JRDataSource , где вы можете реализовать getFieldValue() любым удобным вам способом.

1 голос
/ 10 октября 2010

Вы можете использовать setText вместо того, чтобы добавлять куски самостоятельно.Джаспер будет анализировать текст, добавляя при необходимости куски - $ P {param} для параметров, $ F {field} для полей, $ V {var} для переменных и т. Д. Например:

exp.setText( "$F{column0}.myMethod($V{someIntVar})" )
0 голосов
/ 02 января 2014

Попробуйте это:

final DRIExpression<Boolean> hasZeroPvMeasure = boolExp("$F{" + PROP_THIS + "}.hasZeroPvMeasure($P{controllingModel})");
cols.add(flagCol(hasZeroPvMeasure, "0-PV"));

Где нужен объект данных:

public static final String PROP_THIS = "this";

/**
 * Used in Jasper Expressions
 * @return
 */
public ControllingRowData getThis() {
    return this;
}

Jasper Dynamic Reports также имеет реализацию для интерпретации _THIS, но из-за ошибки он завершается ошибкой во время проверки перед выполнением ...

См. В JRAbstractBeanDataSource:

public static final String CURRENT_BEAN_MAPPING = "_THIS";

И JRAbstractBeanDataSource:

protected static boolean isCurrentBeanMapping(String propertyName)
{
    return CURRENT_BEAN_MAPPING.equals(propertyName);
}

/*...*/
if (isCurrentBeanMapping(propertyName))
{
    value = bean;
}
/*...*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...