You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mf...@apache.org on 2010/01/07 23:38:23 UTC

svn commit: r897041 - in /myfaces/portlet-bridge/core/trunk_2.0.x: api/src/main/java/javax/portlet/faces/ impl/src/main/java/org/apache/myfaces/portlet/faces/bridge/ impl/src/main/java/org/apache/myfaces/portlet/faces/context/

Author: mfreedman
Date: Thu Jan  7 22:38:22 2010
New Revision: 897041

URL: http://svn.apache.org/viewvc?rev=897041&view=rev
Log:
PORTLETBRIDGE-105: encodeResourceURL mishandles encoding portlet:render

PORTLETBRIDGE-104: GFP reads DEFAULT_CHARACTERSET_ENCODING/CHARENCODING from wrong initParam

PORTLETBRIDGE-103: Bridge.destroy fails to release ELContextListener.

Modified:
    myfaces/portlet-bridge/core/trunk_2.0.x/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java
    myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/bridge/BridgeImpl.java
    myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java

Modified: myfaces/portlet-bridge/core/trunk_2.0.x/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/trunk_2.0.x/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java?rev=897041&r1=897040&r2=897041&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/trunk_2.0.x/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java (original)
+++ myfaces/portlet-bridge/core/trunk_2.0.x/api/src/main/java/javax/portlet/faces/GenericFacesPortlet.java Thu Jan  7 22:38:22 2010
@@ -424,7 +424,7 @@
 
   /**
    * Returns the default content type for this portlet request. Subclasses override to
-   * alter the default behavior. Default implementation returns value of the portlet context init
+   * alter the default behavior. Default implementation returns value of the portlet init
    * parameter: javax.portlet.faces.DefaultContentType. If it doesn't exist the portlet
    * request's preferred response content type is returned.
    * 
@@ -436,7 +436,7 @@
   public String getResponseContentType(PortletRequest request)
   {
     String contentType = 
-      getPortletConfig().getPortletContext().getInitParameter(DEFAULT_CONTENT_TYPE);
+      getPortletConfig().getInitParameter(DEFAULT_CONTENT_TYPE);
 
     if (contentType == null || !isInRequestedContentTypes(request, contentType))
     {
@@ -460,7 +460,7 @@
 
   /**
    * Returns the character set encoding used for this portlet response. Subclasses override to
-   * alter the default behavior. Default implementation returns value of the portlet context init
+   * alter the default behavior. Default implementation returns value of the portlet init
    * parameter: javax.portlet.faces.DefaultCharacterSetEncoding. If it doesn't exist null
    * is returned.
    * 
@@ -471,7 +471,7 @@
    */
   public String getResponseCharacterSetEncoding(PortletRequest request)
   {
-    return getPortletConfig().getPortletContext().getInitParameter(DEFAULT_CHARACTERSET_ENCODING);
+    return getPortletConfig().getInitParameter(DEFAULT_CHARACTERSET_ENCODING);
   }
 
 

Modified: myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/bridge/BridgeImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/bridge/BridgeImpl.java?rev=897041&r1=897040&r2=897041&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/bridge/BridgeImpl.java (original)
+++ myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/bridge/BridgeImpl.java Thu Jan  7 22:38:22 2010
@@ -1059,6 +1059,10 @@
       return;
 
     mInitialized = false;
+    
+    // Remove the context listener
+    ((ApplicationFactory)FactoryFinder.getFactory(FactoryFinder.APPLICATION_FACTORY))
+        .getApplication().removeELContextListener(this);
 
     // remove any scopes being managed for this portlet
     // Each scope has a per portlet prefix -- pass in the prefix

Modified: myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java
URL: http://svn.apache.org/viewvc/myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java?rev=897041&r1=897040&r2=897041&view=diff
==============================================================================
--- myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java (original)
+++ myfaces/portlet-bridge/core/trunk_2.0.x/impl/src/main/java/org/apache/myfaces/portlet/faces/context/PortletExternalContextImpl.java Thu Jan  7 22:38:22 2010
@@ -630,28 +630,39 @@
   @Override
   public String encodeResourceURL(String s)
   {
-    if (isOpaqueURL(s))
+    if (isPortletURL(s))
     {
-        return s;
+      return urlEncode(encodeResourceAsViewNavigationURL(s));
     }
-      if (isExternalURL(s))
+    else if (isOpaqueURL(s))
     {
-      return encodeResourceURL(s, false); 
+      // spec says return this unchanged
+      return s;
+    }
+    else if (isExternalURL(s))
+    {
+      return urlEncode(encodeResourceURL(s, false)); 
     }
-    else if (isViewLink(s) || isPortletURL(s))
+    else if (isViewLink(s))
     {
-      return encodeResourceAsViewNavigationURL(s);
+      return urlEncode(encodeResourceAsViewNavigationURL(s));
     }
     else if (!isInProtocolResourceLink(s))
     {
-      return encodeResourceURL(s, true); 
+      return urlEncode(encodeResourceURL(s, true)); 
     }
     else
     {
-      return encodePortletServedResourceURL(s);
+      return urlEncode(encodePortletServedResourceURL(s));
     }
   }
   
+  private String urlEncode(String s)
+  {
+    // replace all spaces in the url with %20 to avoid Faces from encoding with a +
+    return s.replace(" ", "%20");
+  }
+  
   private String encodeResourceURL(String s, boolean targetInApp)
   {
     if (targetInApp)