我想创建一个portlet(我们称之为'Action Manager'),以列出同一页面中所有portlet的所有操作方法(使用spring Annotation @ActionMapping
)作为我的动作管理器portlet。从另一个Portlet获取Portlet应用程序上下文(Liferay + Spring)
我的所有其他portlet使用ParameterHandlerMapping
的请求到合适的控制器
<bean id="parameterHandlerMapping" class="org.springframework.web.portlet.handler.ParameterHandlerMapping">
<property name="defaultHandler" ref="Controller1" />
<property name="parameterName" value="control" />
<property name="parameterMap">
<map>
<entry key="1" value-ref="Controller1" />
<entry key="2" value-ref="Controller2" />
</map>
</property>
</bean>
所以我的目的是要得到我的当前页面上的所有portlet(我已经这样做)地图,并尝试从每个portlet获取parameterHandlerMapping
bean,并从那里获取其控制器名称(Controller1
,Controller2
),我稍后将使用它来获取@ActionMapping
带注释的方法。
是否可以访问每个Portlet“私有”上下文并检索parameterHandlerMapping
bean?
我目前坚持了这一点:
PortletBag portletBag = PortletBagPool.get(portlet.getPortletId());
if (portletBag != null) {
ServletContext servletContext = portletBag.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
ParameterHandlerMapping parameterHandlerMapping = (ParameterHandlerMapping) ctx.getBean(ParameterHandlerMapping.class);
}
这将导致一个异常被抛出,因为有一个在应用程序上下文中没有匹配的bean。我试图通过bean的名字得到它,结果几乎相同。
我也得到了使用
String beanNames[] = ctx.getBeanNamesForType(Object.class);
for (String beanName : beanNames) {
System.out.println(beanName);
}
所有出现在上下文中的豆列表和parameterHandlerMapping
bean是不存在的。
这是我的理解是每个portlet都有自己的parameterHandlerMapping
豆,所以我想ctx
我得到的是“全球性”方面,而不是在portlet自己的“私有”上下文,其中parameterHandlerMapping
豆定义。
如果我是正确的,我得到的“全局”上下文,有没有办法根据它的portletId获取portlet的“私有”上下文?是否有可能做我想做的事?
感谢您对所有您的帮助