2

我有以下代码从 FacesContext 获取 portlet 初始化参数“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>
    <name>javax.portlet.faces.defaultViewId.view</name>
    <value>/pages/setup/page.xhtml</value>
</init-param>

我的 portlet 部署在 Liferay 中并使用 Liferay Faces Bridge。执行上述代码时,我总是得到 defaultValue 的空值。请有人能告诉我我做错了什么吗?

4

2 回答 2

3

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

ExternalContext externalContext = facesContext.getExternalContext();
String defaultView = externalContext.getInitParameter("javax.portlet.faces.defaultViewId.view");
于 2016-04-28T21:14:02.573 回答
2

我找到了解决我自己问题的方法。要获得 portlet 初始化参数,我应该使用 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");
于 2016-04-26T23:08:46.737 回答