从renderMapping调用另一个portlet

时间:2015-08-08 09:19:04

标签: spring-mvc liferay portlet

我想从一个portlet的renderMapping调用另一个portlet。我该怎么做。代码段如下:

Portlet 1:

@RenderMapping
    public String handleRenderRequest(RenderRequest request, RenderResponse response, Model model) {
        if(!admin){
         return "index"
        }
        else{
        //i have to call the rendermapping method of Portlet 2 and need to redirect to portlet 2
        }
    }

如何调用 portlet 2

2 个答案:

答案 0 :(得分:0)

出于可维护性原因,您不应该这样做。如果两者都使用公共代码,则将其提取到两个都调用的通用实现中。这是代码重用的正确方法。如果两个portlet都在同一个插件中,那么也没有类加载问题,这是一个非常简单的选择。其他一切(调用一个完全不同的portlet的render方法)不是你的业务 - 将它纯粹留给portlet容器,不要自己去那里。

答案 1 :(得分:0)

据我所知,你不能。这就是为什么portlet生命周期有两个阶段,即ACTION和RENDER阶段的原因。

如果要重定向到另一个portlet,则必须使用操作阶段,因此您需要创建一个可以点击的操作URL,在操作阶段您可以执行某些操作像这样:

@ActionMapping("goToDetail")
public void goToDetail(@RequestParam(value = "id") Long id, ActionRequest request, ActionResponse response){
    response.setEvent("detailTask", id);
}

在此操作阶段,我们设置了一个触发portlet连接的事件,因此您必须在 portlet.xml (支持的发布/处理事件)中正确配置这些事件,然后你可能还需要在Liferay上配置一些东西。