#spring #grails #groovy
#spring #grails #groovy
Вопрос:
Я использую groovy-grails с отчетами jasper для разработки приложения. Мне нужно выполнить поиск «компонента отчета» на основе его параметра (например, reportname / id, извлеченного из базы данных, который я получу по щелчку клиента), который будет сохранен как свойство компонента отчета из resources.xml либо в reportcontroller, либо в reportservice. Также мне нужно «получить» шаблон jrxml, связанный с этим идентификатором, и сопоставление параметров, оба из которых определены как свойства в компоненте. Мне нужно знать, как мы можем этого добиться, и нужно ли нам определять какие-либо «управляющие компоненты» в xml, которые управляют этими компонентами отчета. Так, например, компонент отчета будет выглядеть следующим образом:
<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. Таким образом, этот компонент ReportManager загружается повторно каждый раз, когда происходит вызов другого отчета, и в идеале сохраняется во время сеанса пользователя.
Ответ №1:
Вы должны быть в состоянии сделать что-то вроде этого:
import org.springframework.context.*
class MyService implements ApplicationContextAware {
ApplicationContext applicationContext
def getBeanByName( String name ) {
applicationContext.getBean( name )
}
}
Это относится к Service
классу grails, но то же самое должно быть справедливо и для контроллера