2014-02-06 3 views
4

Я хотел бы иметь метод контроллера, возвращающий PDF-файл из JasperReports jrxml-файла без использования какой-либо конфигурации xml.Как использовать JasperReportsPdfView без xml config

Я хотел бы использовать JasperReportsPdfView. Это вообще возможно? Я знаю, что это может быть сделано только с кодом Java, как в этом блоге:

http://krams915.blogspot.com/2010/12/spring-3-mvc-jasper-integration_22.html

Но я считаю, что это должно быть возможно с меньшим количеством кода :-)

Вот некоторые примеры кода, который делает не работа к сожалению.

@RequestMapping(value = "/test/pdfreport", method = RequestMethod.GET, produces = "application/pdf") 
public JasperReportsPdfView getPdf() { 

    // does not work like this, unfortunately 
    final Person p = userService.getUserById("the id"); 

    final JasperReportsPdfView view = new JasperReportsPdfView(); 
    view.setReportDataKey("person"); 
    view.addStaticAttribute("person", p); // ?? 
    view.setUrl("report.jrxml"); 
    return view; 
} 

Спасибо за любой указатель.

Edit: Это мой рабочий раствор:

@Autowired 
private ApplicationContext appContext; 

@RequestMapping(value = "/test/pdfreport", method = RequestMethod.GET, produces = "application/pdf") 
public ModelAndView getPdf() { 
    final List<Map<String, Object>> users = userService.getUsers(); 

    final JasperReportsPdfView view = new JasperReportsPdfView(); 
    view.setReportDataKey("users"); 
    view.setUrl("classpath:report.jrxml"); 
    view.setApplicationContext(appContext); 

    final Map<String, Object> params = new HashMap<>(); 
    params.put("users", users); 

    return new ModelAndView(view, params); 
} 

Это важно включить spring-context-support пакет для вашего проекта.

ответ

7

Это работает для меня:

@Autowired private ApplicationContext appContext; 
@Autowired private DataSource dataSource; 

@RequestMapping(value = "/pdf", method = RequestMethod.GET) 
public ModelAndView getPdf() { 
    JasperReportsPdfView view = new JasperReportsPdfView(); 
    view.setJdbcDataSource(dataSource); 
    view.setUrl("classpath:report.jrxml"); 
    Map<String, Object> params = new HashMap<>(); 
    params.put("param1", "param1 value"); 
    view.setApplicationContext(appContext); 
    return new ModelAndView(view, params); 
} 
+0

Спасибо за комментарий. Я попробую и дам вам знать мои результаты. – yglodt

+0

Похоже, у меня отсутствует кувшин ... которого я не могу найти для Spring 4.0. Недостающий класс: org/springframework/ui/jasperreports/JasperReportsUtils Возможно ли, что ваш пример кода основан на более старой версии Spring? – yglodt

+0

Я использую версию весны 4.0.3 ... spring-context-support-4.0.3.RELEASE предоставил класс – maksim

Смежные вопросы