如何在MessageListener的receive方法中获取PortletRequest对象

时间:2015-10-27 06:29:56

标签: java liferay liferay-6 portlet

我开发了一个调度程序portlet,我需要使用themeDisplay并获取groupID。但是,在receive方法中,我无法获取PortletRequest对象来实例化themeDisplay对象。

public class MyScheduler implements MessageListener{
    public void receive(Message message) throws MessageListenerException {  
        ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY);  
        long groupId = themeDisplay.getScopeGroupId();
    }
}

在上面的代码片段中我应该如何获得" portletRequest"?

1 个答案:

答案 0 :(得分:3)

您无法在计划自动触发的消息侦听器中获取portlet请求。调度程序事件侦听器与请求处理完全分离。没有portlet请求可以使用。

如果您在portlet请求处理期间生成了事件,则可以传递有效负载中的数据。

异步消息发送示例(例如,来自portlet动作阶段):

JSONObject jsonObject = JSONFactoryUtil.createJSONObject();
jsonObject.put("userId", themeDisplay.getUserId());
jsonObject.put("groupId", themeDisplay.getScopedGroupId());
...

MessageBusUtil.sendMessage("tour/roadie/setup", jsonObject.toString());

我建议在有效负载中传递单个属性,而不是PortletRequest的实例,因为请求在消息处理过程中可能无效。

有关详细信息,请参阅Asynchronous Messaging With Callbacks