我已经开发了一个调度程序portlet,在其中我需要使用themeDisplay并获取groupID。但是,在接收方法中,我无法获取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”?
最佳答案
您无法在计划自动触发的消息侦听器中获得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。