2016-04-26 8 views
1

Ich habe den folgenden Code, um einen Portlet-Init-Parameter "javax.portlet.faces.defaultViewId.view" von FacesContext zu erhalten.So erhalten Sie Portlet-Init-Parameter in einem JSF-Portlet mit 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 Datei enthält die init param:

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

Mein Portlets in Liferay bereitgestellt und nutzt Liferay Brücke Gesichter. Wenn der obige Code ausgeführt wird, erhalte ich immer einen Nullwert für defaultValue. Kann mir bitte jemand sagen, was ich falsch mache?

Antwort

1

Ich habe eine Lösung für mein eigenes Problem gefunden. Um die Portlet-Init-Parameter zu erhalten, sollte ich PortletConfig anstelle von PortletContext verwenden. Der Code-Snippet unten macht den Job:

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

Um eine hartcodierte Abhängigkeit von dem Portlet-API zu vermeiden, können Sie einfach die ExternalContext.getInitParameter (String) -Methode verwenden:

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