我希望创建一个portlet(称之为“Action Manager”),以列出在同一页面中与我的Action Manager portlet相同的所有portlet中的所有操作方法(使用spring注释@ActionMapping)。
我所有其他的Portlet都在使用ParameterHandlerMapping将传入的请求映射到适当的控制器。
所以我的意图是获取当前页面上的所有端口,然后尝试从每个端口获取
能否访问每个端口的“私有”上下文并检索
我目前遇到了困难:
我所有其他的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>
所以我的意图是获取当前页面上的所有端口,然后尝试从每个端口获取
parameterHandlerMapping
bean,并从中获取其控制器名称(Controller1
、Controller2
),稍后我将使用这些名称获取@ActionMapping
注释的方法。能否访问每个端口的“私有”上下文并检索
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的名称获取它,结果基本相同。
我还使用以下方法获取了上下文中存在的所有bean的列表
String beanNames[] = ctx.getBeanNamesForType(Object.class);
for (String beanName : beanNames) {
System.out.println(beanName);
}
如果没有parameterHandlerMapping
bean,则可能是由于其未在端口中定义。每个门户都有自己的parameterHandlerMapping
bean,因此我猜测我得到的ctx
是“全局”上下文,而不是该门户自己的“私有”上下文,其中定义了parameterHandlerMapping
bean。
如果我的理解正确,并且我得到的是“全局”上下文,则是否有一种方法可以基于其portletId获取一个门户的“私有”上下文?我想做的事情是否可能?
感谢您的帮助