Как правильно настроить параметры портлетов в Liferay? - PullRequest
1 голос
/ 08 марта 2012

Если портлет является веб-приложением, то почему предпочтения портлета берутся из ServletRequest (в области запроса)?

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

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

ОБНОВЛЕНИЕ 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");
        }

    }
}

ОБНОВЛЕНИЕ 2

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

На самом деле я уже предполагал это, и это работает, но я хотел бы знать, правильно ли это?

Ответы [ 2 ]

6 голосов
/ 09 марта 2012
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:

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

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

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

1 голос
/ 09 марта 2012

Полагаю, вы не относитесь к классу Liferay MVCPortlet ?

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

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

...