如何使用FacesContext在JSF Portlet中获取portlet init参数

时间:2016-04-26 16:30:05

标签: jsf liferay facescontext

我有以下代码从FacesContext获取portlet init参数“javax.portlet.faces.defaultViewId.view”。

 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:

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

我的portlet部署在Liferay中并使用Liferay Faces Bridge。执行上面的代码时,我总是得到defaultValue的null值。请有人能说出我做错了吗?

2 个答案:

答案 0 :(得分:3)

为了避免对Portlet API的硬编码依赖,您可以简单地使用ExternalContext.getInitParameter(String)方法:

ExternalContext externalContext = facesContext.getExternalContext();
String defaultView = externalContext.getInitParameter("javax.portlet.faces.defaultViewId.view");

答案 1 :(得分:1)

我找到了解决自己问题的方法。要获取portlet init params,我应该使用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");