[ 
https://issues.apache.org/jira/browse/PORTLETBRIDGE-12?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12541994
 ] 

Scott O'Bryan commented on PORTLETBRIDGE-12:
--------------------------------------------

Hey Bernhard, I'm going to assume the "official" patch for this does not simply 
change "xhml" to "jsf"?  

> PortletViewHandler - viewId handling
> ------------------------------------
>
>                 Key: PORTLETBRIDGE-12
>                 URL: https://issues.apache.org/jira/browse/PORTLETBRIDGE-12
>             Project: MyFaces Portlet Bridge
>          Issue Type: Bug
>          Components: Impl
>    Affects Versions: 1.0.0-SNAPSHOT
>         Environment: Tomcat 5.5.20, Pluto 1.1.4, MyFaces 1.2.1-SNAPSHOT 
> (locally patched version)
>            Reporter: Bernhard Huemer
>            Priority: Critical
>
> While restoring a view JSF tries to determine the view ID by using some 
> request information (i.e. request path and path info). However, a JSF portlet 
> bridge has to use a different approach to "save" the view ID (because of the 
> portlet environment) and therefore the PortletViewHandler intercepts 
> getActionURL in order to save the view ID as url argument. During the next 
> request the PortletExternalContext simulates the appropriate request info 
> using this view ID (see PortletExternalContextImpl.mapPathsFromViewId). The 
> problem is that the PortletViewHandler doesn't save the correct version of 
> the view ID. 
> The following example shoud illustrate why the view ID is incorrect. 
> Default View ID: /index.jsf, Default Suffix: .xhtml
> As I've already said, the PortletViewHandler saves the view ID as url 
> argument. Actually the PortletExternalContext is responsible for saving url 
> parameters, but the PortletViewHandler determines the view ID to save (see 
> PortletViewHandler.getActionURL). However, the PortletViewHandler saves the 
> given view ID (i.e. the given parameter - just remember the signature of 
> getActionURL) which results in the following url:
> /<context-name>/index.jsf?_VIEW_ID=/index.xhtml
> During the next request the PortletExternalContext tries to map the path 
> information by using this view ID (I know that I'm repeating myself ;-)). In 
> order to so, it iterates over all servlet mappings to determine the proper 
> request information. This attempt fails, however, as no Faces Servlet has 
> been mapped to *.xhtml. As a last resort the PortletExternalContext assumes 
> that the given view ID can be used as path info. The outcome of this is:
> request path = null
> path info = /index.xhtml
> However,  JSF would expect the following request information in order to 
> restore the appropriate view:
> request path = /index.jsf
> path info = null
> I've resolved the bug by saving the "external" view ID (don't know if there's 
> any special name for it, for example /index.jsf instead of /index.xhtml), at 
> least it works here, but my patch is rather "provisional" as I've just done 
> the following: 
> Index: 
> impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java
> ===================================================================
> --- 
> impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java
>        Tue Nov 06 13:22:08 CET 2007
> +++ 
> impl/src/main/java/org/apache/myfaces/portlet/faces/application/PortletViewHandlerImpl.java
>        Tue Nov 06 13:22:08 CET 2007
> @@ -127,7 +127,7 @@
>      // attribute
>      {
>        actionURL = URLUtils.appendURLArguments(actionURL, new String[] {
> -          PortletExternalContextImpl.VIEW_ID_QUERY_PARAMETER, viewId });
> +          PortletExternalContextImpl.VIEW_ID_QUERY_PARAMETER, 
> viewId.replace("xhtml", "jsf") });
>      }
>  
>      return actionURL;
> I'll create an appropriate version of this "patch" next week, if no one else 
> wants to take a look at it.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to