ポートレット (「アクション マネージャー」と呼びましょう) を作成し@ActionMapping
て、アクション マネージャー ポートレットと同じページ内のすべてのポートレットからすべてのアクション メソッドを (Spring Annotation を使用して) リストしたいと考えています。
私の他のすべてのポートレットは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 は存在しません。
各ポートレットには独自の Bean があることを理解しているので、取得しているのは「グローバル」コンテキストであり、 Bean が定義されているポートレット独自の「プライベート」コンテキストではないとparameterHandlerMapping
思います。ctx
parameterHandlerMapping
私が正しく、「グローバル」コンテキストを取得している場合、portletId に基づいてポートレットの「プライベート」コンテキストを取得する方法はありますか? 私がやりたいことをすることさえ可能ですか?
ご協力ありがとうございました