如何在配置(Liferay)中获取portlet上下文?

如何在配置(Liferay)中获取portlet上下文?,liferay,portlet,Liferay,Portlet,我想在config mod中访问portlet的上下文(在我的ConfigurationAction接口的实现中) 我从几个小时开始尝试在我的ConfigurationActionImpl.processAction(PortletConfig PortletConfig,ActionRequest ActionRequest,ActionResponse ActionResponse)中获得与我在doView(RenderRequest RenderRequest,RenderResponse

我想在config mod中访问portlet的上下文(在我的
ConfigurationAction
接口的实现中)

我从几个小时开始尝试在我的
ConfigurationActionImpl.processAction(PortletConfig PortletConfig,ActionRequest ActionRequest,ActionResponse ActionResponse)
中获得与我在
doView(RenderRequest RenderRequest,RenderResponse RenderResponse)
中相同的上下文,但没有任何好的结果

在我的
doView()
中,我可以使用
getPortletContext()
(与
getPortletConfig().getPortletContext()
)和
renderRequest.getPortletSession()
(它不是相同的上下文实例)访问我的portlet上下文,但我不知道如何从我的
processAction()
访问其中一个对象


有人能帮我吗?

这是我最后使用的方法:

PortletBag portletBag = PortletBagPool.get(portletId);
DispatcherPortlet portlet = (DispatcherPortlet)portletBag.getPortletInstance();

PortletContext pCtx = portlet.getPortletContext();
如果要计算
端口ID
,可以执行以下操作:

String portletResource = ParamUtil.getString(renderRequest, "portletResource");
String portletId;
if (portletResource.contains("_INSTANCE")) {
    portletId = portletResource.substring(0, portletResource.indexOf("_INSTANCE"));
} else {
    portletId = portletResource;
}
作为旁注,我想提到我需要它,以便能够获得portlet的Spring
ApplicationContext
,我是这样做的:

PortletContext pCtx = portlet.getPortletContext();
ApplicationContext portletAppContext = (ApplicationContext)pCtx.getAttribute(FrameworkPortlet.PORTLET_CONTEXT_PREFIX + portlet.getPortletName());

作为一种解决方法,我使用了一个静态类变量(HashMap)。它满足了我的需要,但我不确定它是否是最佳实践。portlet类上的任何成员(静态或非静态)通常都是潜在问题的指示器。(我认为这一假设适用于你的情况)。如果你问问题的方式不是问“如何达到我想到的解决方案”,而是问“我想实现X-我如何才能最好地做到这一点”,那么可能会更容易。谢谢你的评论。我尝试了你所说的方式,但这个问题并没有真正的解决办法。就像其他问题一样,我的建议是不要把整个豆子放在上下文、偏好或其他方面。如果需求是必需的,那么您需要一个缓存层,这是一个主要的困难),然后描述整个需求。这些bean的计算取决于门户中的内容,我不想在每次查看portlet时都这样做,因为这需要花费大量的时间。生成的bean不是很大,但我不想将数据存储在首选项中(我不想解析它)。我想你是对的:我需要一个缓存,这正是我用静态变量所做的。但是你不觉得缓存层对我的需求来说太多了吗?