如果portlet是一个Web应用程序,那么为什么从ServletRequest获取portlet首选项(在请求范围内)?
如何在应用程序范围内获取首选项对象?
更新1
我通过以下方式获取portlet首选项。这是对的吗?下面的prefs成员在应用范围内。
private synchronized void setupPreferences(HttpServletRequest request) {
// creating preferences
if( prefs == null ) {
prefs = PortalUtil.getPreferences(request);
if( prefs != null ) {
System.out.println("Preferences were taken from request");
}
String portletResource = ParamUtil.getString(request, "portletResource");
if (Validator.isNotNull(portletResource)) {
try {
System.out.println("Replacing preferences from 'portletRecource' parameter");
prefs = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource);
} catch (SystemException e) {
e.printStackTrace();
} catch (PortalException e) {
e.printStackTrace();
}
}
if( prefs == null ) {
System.out.println("Preferences were NOT obtained yet");
}
else {
System.out.println("Preferences are OK");
}
}
}
更新2
我在我的应用程序中也使用servlet和静态对象。人们可以知道静态对象在应用范围内。我想知道我可以将portlet首选项对象保留在某个静态对象中,还是每次都需要从请求中重新获取它?
其实我已经假设了这个并且它有效,但我想知道它是否正确?
答案 0 :(得分:6)
com.liferay.portal.util.PortalUtil.getPreferences(HttpServletRequest)
只是一种实用方法。
如果你看看实施情况,你会看到发生了什么
public PortletPreferences getPreferences(HttpServletRequest request) {
RenderRequest renderRequest = (RenderRequest)request.getAttribute(
JavaConstants.JAVAX_PORTLET_REQUEST);
PortletPreferences preferences = null;
if (renderRequest != null) {
PortletPreferencesWrapper preferencesWrapper =
(PortletPreferencesWrapper)renderRequest.getPreferences();
preferences = preferencesWrapper.getPreferencesImpl();
}
return preferences;
}
在您的处理程序中,您可以/应该使用request.getPreferences()。 “request”是PortletRequest,RenderRequest,ActionRequest,ResourceRequest的实现。
UPDATW:
如果您需要从servlet访问特定的portlet首选项,可以尝试使用
com.liferay.portlet.PortletPreferencesFactoryUtil.getPortletSetup(HttpServletRequest p_request, String p_portletId)
它是静态方法,并返回PortletPreferences,因此知道您的portlet的id并拥有请求对象,您应该能够获得首选项。
答案 1 :(得分:1)
我猜你不是Liferay的 MVCPortlet 类的子类?
无论如何,你传递给setupPreferences的请求对象最初是一个 PortletRequest 对象,你已经得到了 HttpServletRequest 了?
如果是这样,您只需拨打 PortletRequest.getPreferences();