Как получить параметры инициализации портлета в портлете JSF с помощью FacesContext

У меня есть следующий код для получения параметра инициализации портлета «javax.portlet.faces.defaultViewId.view» из FacesContext.

 FacesContext fc = FacesContext.getCurrentInstance();
 ExternalContext externalContext = facesContext.getExternalContext();
 PortletContext portletContext = (PortletContext) externalContext.getContext();
 return String defaultView = portletContext.getInitParameter("javax.portlet.faces.defaultViewId.view");

Файл portlet.xml содержит параметр инициализации:

<init-param>
    <name>javax.portlet.faces.defaultViewId.view</name>
    <value>/pages/setup/page.xhtml</value>
</init-param>

Мой портлет развернут в Liferay и использует Liferay Faces Bridge. Когда приведенный выше код выполняется, я всегда получаю нулевое значение для defaultValue. Подскажите, пожалуйста, что я делаю не так?


person user872858    schedule 26.04.2016    source источник


Ответы (2)


Чтобы избежать жестко заданной зависимости от API портлета, вы можете просто использовать метод ExternalContext.getInitParameter (String):

ExternalContext externalContext = facesContext.getExternalContext();
String defaultView = externalContext.getInitParameter("javax.portlet.faces.defaultViewId.view");
person Neil Griffin    schedule 28.04.2016

Я нашел решение своей проблемы. Чтобы получить параметры инициализации портлета, я должен использовать PortletConfig вместо PortletContext. Приведенный ниже фрагмент кода выполняет свою работу:

ExternalContext externalContext = facesContext.getExternalContext();
PortletRequest portletRequest = (PortletRequest) externalContext.getRequest();
PortletConfig config = (PortletConfig) portletRequest.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG);
String defaultView = config.getInitParameter("javax.portlet.faces.defaultViewId.view");
person user872858    schedule 26.04.2016
comment
Если кому-то еще интересно: JavaConstants.JAVAX_PORTLET_CONFIG это "javax.portlet.config". - person david; 16.02.2021