1

我有一个 WAR 文件,其中包含两个带有专用控制器的 portlet。当我启动 Liferay/调用包含两个 portlet 的页面时,如何配置它以找到所有控制器(处理程序方法)?在 portlet.xml 中,可以发现两个 portlet 都具有
<portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>.

在 spring-mvc-portlet.xml 我使用<context:component-scan base-package="com.foo.bar" />.

两个控制器都应该有一个使用@RenderMapping 注释的默认处理程序方法。控制器都在类型级别使用 @RequestMapping("VIEW") 进行注释。

目前发生的情况是仅调用来自控制器 A 的默认处理程序方法(在 portlet.xml 中定义的第一个)。

4

2 回答 2

1

首先,我建议您将每个 portlet(控制器)放在单独的包中。

对于每个 portlet,您应该有以 portlet.xml 中的“portlet-name”命名的 spring xml 文件因此,如果您<portlet-name>my-first-portlet</portlet-name>myfirstportlet-portlet.xml,在 WEB-INF 中,它具有组件扫描元素。

于 2014-01-02T10:00:26.703 回答
1

问题解决了!

我解决了这个问题,这种方法对我有用:
我必须将每个控制器放入自己的包中。为了让 Liferay 意识到这一点,我必须以portlet.xml 一种方式进行配置,为列出的每个 portlet 提供一个专用的上下文配置。因此,我复制了<myPortlet>-portlet.xml,将其正确重命名为<myOtherPortlet>-portlet.xml并将此名称放入 contextConfigParam <init-param>portlet.xml 中的元素中。在上下文配置文件中,我必须按如下方式修改 context:component-scan 元素,以排除其他控制器被忽略为该控制器。例如,在我的 ListController 的上下文配置 XML 文件中,我必须以这种方式排除 ImportController:

<context:component-scan base-package="com.foo.bar" use-default-filters="true">
    <context:exclude-filter type="assignable" expression="com.foo.bar.importer.portlet.ImportController"/>
</context:component-scan>

...并且在 ImportController 的上下文配置 XML 文件中,我必须相应地排除 ListController。

于 2014-01-02T13:53:01.167 回答