我有一个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中定义的第一个)。
答案 0 :(得分:1)
首先,我建议您将每个portlet(控制器)放在不同的包中。
对于每个portlet,您应该从portlet.xml获得以“portlet-name”命名的spring xml文件
因此,如果你有<portlet-name>my-first-portlet</portlet-name>
,你应该在WEB-INF中拥有 myfirstportlet-portlet.xml ,它具有组件扫描元素。
答案 1 :(得分:1)
我解决了问题,这种方式对我有用:
我必须将每个控制器放入自己的包中。为了让Liferay意识到这一点,我必须配置portlet.xml
以某种方式为列出的每个portlet提供专用的上下文配置。因此,我复制了<myPortlet>-portlet.xml
,
将其正确地重命名为<myOtherPortlet>-portlet.xml
并将此名称放入。{
portlet.xml中的contextConfigParam <init-param>
元素。
在上下文配置文件中,我必须修改上下文: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。