2014-06-22 67 views
0

我有以下Spring xml文件,用于为不同的文件格式生成不同的视图。我有两个属性urldatasource。我希望在运行时更改url,即我想使用不同的jrxml文件,而不仅仅是一个静态文件。如何在运行时更改以下bean属性?

<bean id="pdfReport" 
     class="org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView" 
     p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" /> 

    <bean id="xlsReport" 
     class="org.springframework.web.servlet.view.jasperreports.JasperReportsXlsView" 
     p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" /> 

    <bean id="htmlReport" 
     class="org.springframework.web.servlet.view.jasperreports.JasperReportsHtmlView" 
     p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" /> 

    <bean id="csvReport" 
     class="org.springframework.web.servlet.view.jasperreports.JasperReportsCsvView" 
     p:url="classpath:tree-template.jrxml" p:reportDataKey="datasource" /> 

回答

3

从上下文

ApplicationContext context = ...; 
JasperReportsCsvView view = (JasperReportsCsvView) context.getBean("csvReport"); 

检索bean并使用其setter方法来更改属性

view.setUrl(someNewValue); 

做同样的事情对每个bean。如果您的bean共享超级类型,则可以使用ApplicationContext#getBeansOfType(Class)立即将它们全部检索为Map。然后迭代条目并更改视图的属性。

+0

非常感谢您的回复。我使用了下面的代码:JasperReportsPdfView view =(JasperReportsPdfView)applicationContext.getBean(“pdfReport”); \t \t view.setUrl(“D:\\ Jasper JRXML \\ Template.jrxml”); \t \t modelAndView = new ModelAndView(view,parameterMap);但是,这是一个spirng豆的观点并没有改变。我正在使用MVC模式。 – phoenix

+0

@BRS啊,似乎那些贾斯珀报告视图加载他们的资源形式的URL,当他们被创建并在其生命周期期间重新使用。您将需要创建一个新的bean来使用不同的模板。 –

+0

因此,对于每个报告,我都应该有一个单独的类,并在需要时通过设置jrxml和数据源来创建bean。那么DI在这里有多有用? – phoenix