DynamicJasper: доступ к значениям для динамических столбцов в связанном отчете - PullRequest
3 голосов
/ 24 июня 2011

Мне нужно создать отчет в DynamicJasper с несколькими «подотчетами», которые содержат разные столбцы.Данные для столбцов хранятся в HashMap на каждой строке объекта.В DynamicJasper я не нашел способа указать, что значение столбца должно исходить из определенного ключа в HashMap.

Я обнаружил, что если я создаю один отчет, я могу расширить JRAbstractBeanDataSource и создать свой собственный источник данных, который знает, как правильно получать данные, основываясь на том, как я форматирую имя поля.Тем не менее, когда я использую addConcatenatedReport для добавления в несколько отчетов, «подотчеты» используют JRBeanCollectionDataSource вместо моего пользовательского источника данных.

Единственное решение, которое я до сих пор придумал, это иметь POJO, который имеет кучусвойств, таких как "column1value" и "column2value", которые я предварительно загружаю и использую для ссылок на поля в динамических столбцах.Я действительно не хочу этого делать ... может кто-нибудь придумает какие-нибудь другие варианты?Что-то мне не хватает?

Sidenote: есть идеи, почему вы не можете передать пользовательский тип источника данных в функцию addConcatenatedReport?Технические проблемы или это просто не нужно было?Похоже, это было бы обычной потребностью в «динамическом» отчете.

1 Ответ

1 голос
/ 25 июня 2011

Я вчера искал то же самое и наткнулся на ваш пост (и увидел, что он недавно).После некоторых поисков мне удалось преодолеть эту проблему, поэтому я решил, что было бы неплохо поделиться с вами своими выводами.

Я полагаю, что вы определили POJO для ваших данных, а затем добавили все эти объекты в HashMapя, если я прав).

То, что я сделал, было создать новый объект, который расширяет реализацию HashMap.(Фактически вам не нужно расширять это, вы можете использовать сам объект HashMap).Так что теперь вместо того, чтобы иметь объекты внутри HashMap, я непосредственно вставил значения для свойств.Но давайте просто добавим несколько блоков кода, чтобы очистить вещи:)

Предположим, у вас есть следующий PoJO

public class MyPOJO{

  private String name;
  private String value;
  //getters, setters etc..
 }

Вместо добавления этих различных объектов в список и предоставления его в качестве источника данныхВы можете использовать HashMap таким образом, чтобы определить свои объекты:

Map<String,String> myObject1=new HashMap<String,String>();
myObject1.put("name","Name1");
myObject1.put("value","Value1");

Map<String,String> myObject2=new HashMap<String,String>();
myObject2.put("name","Name2");
myObject2.put("value","Value2");

После определения этих объектов мы можем добавить их в список и предоставить его как источник данных (JRBeanCollectionDataSource).Таким образом, ключи каждого HashMap считаются свойствами, определенными в столбцах (свойства исходного POJO).

Я не знаю, является ли мое решение лучшим, но оно сработало для меня!

...