2014-06-22 61 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