我有以下代码从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值。请有人能说出我做错了吗?
答案 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");