3

ポートレット (「アクション マネージャー」と呼びましょう) を作成し@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 を取得して、そこからコントローラー名 ( Controller1Controller2) を取得することです。@ActionMapping注釈付きメソッド。

各ポートレットの「プライベート」コンテキストにアクセスして、parameterHandlerMappingBean を取得することはできますか?

私は現在これにこだわっています:

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);
}

parameterHandlerMappingBean は存在しません。

各ポートレットには独自の Bean があることを理解しているので、取得しているのは「グローバル」コンテキストであり、 Bean が定義されているポートレット独自の「プライベート」コンテキストではないとparameterHandlerMapping思います。ctxparameterHandlerMapping

私が正しく、「グローバル」コンテキストを取得している場合、portletId に基づいてポートレットの「プライベート」コンテキストを取得する方法はありますか? 私がやりたいことをすることさえ可能ですか?

ご協力ありがとうございました

4

1 に答える 1