You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Simon Kitching (JIRA)" <de...@myfaces.apache.org> on 2007/12/05 17:06:43 UTC

[jira] Created: (ORCHESTRA-13) RequestParameterProviderManager fails when template URL includes EL expressions

RequestParameterProviderManager fails when template URL includes EL expressions
-------------------------------------------------------------------------------

                 Key: ORCHESTRA-13
                 URL: https://issues.apache.org/jira/browse/ORCHESTRA-13
             Project: MyFaces Orchestra
          Issue Type: Bug
          Components: RequestParameterProvider
    Affects Versions: 1.0
            Reporter: Simon Kitching


As reported by Jonas Esser on the mailing list, a url of form
  http://foo.example?productId=#{var}
fails badly; the final url is:
  http://foo.example?productId=&contextId=1val

This occurs in the "petstore" orchestra example, when viewing a product's details.

The problem is that RequestParameterProvidedManager thinks the "#" is a url fragment marker. Query params go before fragment markers, eg
  http://foo.example?productId=5#anchor
does correctly become
  http://foo.example?productId=5&contextId=1#anchor

But #{...} is NOT an anchor. In the petstore example, the url can be found in faces-config.xml:
	<navigation-case>
		<from-outcome>ProductDetails</from-outcome>
		<to-view-id>/mops/ProductDetail.jsp?productId=#{param.productId}</to-view-id>
		<redirect/>
	</navigation-case>




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


[jira] Commented: (ORCHESTRA-13) RequestParameterProviderManager fails when template URL includes EL expressions

Posted by "Mario Ivankovits (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/ORCHESTRA-13?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12548721 ] 

Mario Ivankovits commented on ORCHESTRA-13:
-------------------------------------------

But the RequestParameterProvidedManager should not see any url with el-expressions in it.
The UrlParameterNavigationHandler should have replaced them all.

If this didn't work I see two possible problems:

1) UrlParameterNavigationHandler is not configured correctly (needs to be done manually, is not setup by orchestra)
2) The UrlParameterNavigationHandler is broken :-(

> RequestParameterProviderManager fails when template URL includes EL expressions
> -------------------------------------------------------------------------------
>
>                 Key: ORCHESTRA-13
>                 URL: https://issues.apache.org/jira/browse/ORCHESTRA-13
>             Project: MyFaces Orchestra
>          Issue Type: Bug
>          Components: RequestParameterProvider
>    Affects Versions: 1.0
>            Reporter: Simon Kitching
>
> As reported by Jonas Esser on the mailing list, a url of form
>   http://foo.example?productId=#{var}
> fails badly; the final url is:
>   http://foo.example?productId=&contextId=1val
> This occurs in the "petstore" orchestra example, when viewing a product's details.
> The problem is that RequestParameterProvidedManager thinks the "#" is a url fragment marker. Query params go before fragment markers, eg
>   http://foo.example?productId=5#anchor
> does correctly become
>   http://foo.example?productId=5&contextId=1#anchor
> But #{...} is NOT an anchor. In the petstore example, the url can be found in faces-config.xml:
> 	<navigation-case>
> 		<from-outcome>ProductDetails</from-outcome>
> 		<to-view-id>/mops/ProductDetail.jsp?productId=#{param.productId}</to-view-id>
> 		<redirect/>
> 	</navigation-case>

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


[jira] Commented: (ORCHESTRA-13) RequestParameterProviderManager fails when template URL includes EL expressions

Posted by "Simon Kitching (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/ORCHESTRA-13?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12548966 ] 

Simon Kitching commented on ORCHESTRA-13:
-----------------------------------------

I've done some debugging on this.

After clicking on the "product details" link of the petstore, the stack trace is like this:

RequestParameterProviderManager.encodeAndAttachParameters(String) line: 111	
RequestParameterResponseWrapper.encodeURL(String) line: 42	
ServletExternalContextImpl.encodeActionURL(String) line: 386	
UrlParameterNavigationHandler$1$1(ExternalContextWrapper).encodeActionURL(String) line: 49	
RedirectTrackerExternalContextWrapper.encodeActionURL(String) line: 53	
NavigationHandlerImpl.handleNavigation(FacesContext, String, String) line: 93	
RedirectTrackerNavigationHandler.handleNavigation(FacesContext, String, String) line: 40	
UrlParameterNavigationHandler.handleNavigation(FacesContext, String, String) line: 54	
ActionListenerImpl.processAction(ActionEvent) line: 82	

The url parameter is:
   ProductDetail.faces?productId=#{param.productId}
so the encodeAndAttachParameters method then proceeds to stuff the url up.

Here is the point at which the EL expansion is done (later):

UrlParameterNavigationHandler.interceptRedirect(FacesContext, String) line: 91	
UrlParameterNavigationHandler$1$1.redirect(String) line: 62	
RedirectTrackerExternalContextWrapper.redirect(String) line: 222	
NavigationHandlerImpl.handleNavigation(FacesContext, String, String) line: 93	
RedirectTrackerNavigationHandler.handleNavigation(FacesContext, String, String) line: 40	
UrlParameterNavigationHandler.handleNavigation(FacesContext, String, String) line: 54	
ActionListenerImpl.processAction(ActionEvent) line: 82	


In short, the EL expansion only occurs when ExternalContext.sendRedirect is invoked by the "real" NavigationHandlerImpl. But the navigation handler invokes that only after it thinks it has built the full url to redirect to, ie after it has called encodeActionUrl. So encodeActionUrl is always called before EL expansion occurs.

A workaround for JSF12 is probably to use ${...} form EL expressions in navigation cases, as it is the "#" that is confusing things.

I wonder if the EL expansion can just be moved into the RequestParameterProviderManager...

> RequestParameterProviderManager fails when template URL includes EL expressions
> -------------------------------------------------------------------------------
>
>                 Key: ORCHESTRA-13
>                 URL: https://issues.apache.org/jira/browse/ORCHESTRA-13
>             Project: MyFaces Orchestra
>          Issue Type: Bug
>          Components: RequestParameterProvider
>    Affects Versions: 1.0
>            Reporter: Simon Kitching
>
> As reported by Jonas Esser on the mailing list, a url of form
>   http://foo.example?productId=#{var}
> fails badly; the final url is:
>   http://foo.example?productId=&contextId=1val
> This occurs in the "petstore" orchestra example, when viewing a product's details.
> The problem is that RequestParameterProvidedManager thinks the "#" is a url fragment marker. Query params go before fragment markers, eg
>   http://foo.example?productId=5#anchor
> does correctly become
>   http://foo.example?productId=5&contextId=1#anchor
> But #{...} is NOT an anchor. In the petstore example, the url can be found in faces-config.xml:
> 	<navigation-case>
> 		<from-outcome>ProductDetails</from-outcome>
> 		<to-view-id>/mops/ProductDetail.jsp?productId=#{param.productId}</to-view-id>
> 		<redirect/>
> 	</navigation-case>

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