2012-03-08 4 views
1

Если портлет - это веб-приложение, то почему настройки портлета берутся из ServletRequest (в области запроса)?Как правильно выбрать портлеты в Liferay?

http://docs.liferay.com/portal/6.1/javadocs/com/liferay/portal/util/PortalUtil.html#getPreferences(javax.servlet.http.HttpServletRequest)

Как можно принять объект предпочтения в области приложения?

UPDATE 1

Я получение портлета следующим образом. Правильно ли это? член 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"); 
     } 

    } 
} 

UPDATE 2

Я использую также сервлеты и статические объекты в моем приложении. Статические объекты находятся в области приложения, как можно узнать. Интересно, могу ли я сохранить объект предпочтений портлетов в каком-то статическом объекте, или мне нужно каждый раз получать его от запроса?

Фактически я уже предполагал это, и он работает, но я хочу знать, это правильно?

ответ

1

Я предполагаю, что вы не подклассифицируете Liferay's MVCPortlet класс?

В любом случае это объект запроса, который вы передаете в setupPreferences первоначально PortletRequest объект, который вы получили HttpServletRequest из?

Если это так, вы можете просто позвонить PortletRequest.getPreferences();

+0

Объект 'request' может быть как' PortletRequest', так и обычным 'HttpServletRequest', переходящим в обычный сервлет. – Dims

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(). «запрос» - реализация PortletRequest, RenderRequest, ActionRequest, ResourceRequest.

UPDATW:

Если вам необходимо получить доступ к определенным портлетам preferneces из сервлета, вы можете попробовать с

com.liferay.portlet.PortletPreferencesFactoryUtil.getPortletSetup(HttpServletRequest p_request, String p_portletId) 

Это статический метод, и возвращает PortletPreferences, поэтому зная идентификатор портлета и имеющим объект запроса вы должны иметь возможность получать предпочтения.

+0

В любом случае в вашем примере (-ых) предпочтения также берутся из запросов разных видов. Означает ли это, что предпочтения имеют область запроса? В моем приложении мне нужно получить доступ к настройкам не только из рендеринга портлетов, но и из других мест. – Dims

+0

Да, параметры портлета хранятся в запросе портлета. Вы можете получить доступ к ним в обработчиках рендеринга, действий, ресурсов или любом другом методе, которому вы передаете запрос. Какие «другие места» вы имеете в виду, пожалуйста, обновите вопрос. –

+0

Вопрос в том, почему они хранятся в запросе, если они используются в приложении? «Другие места» - это сервлеты и статические объекты, я обновил вопрос. – Dims

Смежные вопросы