【问题标题】:How to get portlet init parameters in a JSF Portlet using FacesContext如何使用 FacesContext 在 JSF Portlet 中获取 Portlet 初始化参数
【发布时间】:2016-08-20 14:54:51
【问题描述】:

我有以下代码从 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 的空值。请问有人能告诉我我做错了什么吗?

【问题讨论】:

    标签: jsf liferay facescontext


    【解决方案1】:

    我找到了解决我自己问题的方法。要获得 portlet 初始化参数,我应该使用 PortletConfig 而不是 PortletContext。下面的代码 sn-p 完成了这项工作:

    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");
    

    【讨论】:

    • 如果有人想知道:JavaConstants.JAVAX_PORTLET_CONFIG"javax.portlet.config"
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多