查找来自resources.xml的bean到groovy中的controller / service

时间:2011-10-13 18:50:16

标签: spring grails groovy

我正在使用带有jasper报告的groovy-grails开发应用程序。我需要根据它的参数查找'report bean'(比如从数据库中检索的reportname / id,我将从客户点击中获取) - 它将作为report.xml的属性从resources.xml存储到reportcontroller或reportservice中。此外,我必须'获取'与此id和参数Map相关的jrxml模板,这两个模板都定义为bean中的属性。我需要知道如何实现这一点,我们是否需要在管理这些报告bean的xml中定义任何“管理bean”。 例如,报告bean将如下所示:

     <bean id="DeptReport" class="com.myapp.reporting.domain.Report">    
        <property name="reportName" value="Dept Report"/>
        <property name="reportFiles">
          <map>
            <entry key="JasperPrint" value="DeptRoles.jrxml"/>
          </map>
        </property>
        <property name="promptforparameter" value="true"/>
        <property name="parameter" value="department_id"/>
        <property name="displayName" value="report.deptReport.name"/>
     </bean>

会有很多像这样的豆子。

所有报告的.jrxml文件都存储在一个目录中,我想将该位置连接到报告上下文中,这样每当在前端单击报告时,我想从上下文中查找这些值到报告服务/控制器以生成报告。我知道我们必须在某处做ctx.getbean(reportId),但我也想知道如何使用模板位置,数据源,参数映射,reportid和jasperreportrenderrer对象等其他属性设置管理器bean。因此,每次调用另一个报表时,都会重新加载此ReportManager bean,并在理想情况下在用户会话中保留。

1 个答案:

答案 0 :(得分:0)

你应该可以这样做:

import org.springframework.context.*

class MyService implements ApplicationContextAware {
  ApplicationContext applicationContext

  def getBeanByName( String name ) {
    applicationContext.getBean( name )
  }
}

这是grails Service类,但对于控制器也应如此