我想从一个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 。
答案 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上配置一些东西。