[ 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.