facesContext.getExternalContext().encodeActionURL must not be called for URLs
from the ViewHandler
--------------------------------------------------------------------------------------------------
Key: MYFACES-1748
URL: https://issues.apache.org/jira/browse/MYFACES-1748
Project: MyFaces Core
Issue Type: Bug
Components: General
Affects Versions: 1.1.5
Environment: Portlet environment using a WSRP portlet implemented with
MyFaces
Reporter: Dirk Schaube
In
org.apache.myfaces.shared_impl.renderkit.html.HtmlFormRendererBase.encodeBegin
(and maybe other classes rendering action URLs) you find the following code
segment:
String actionURL = getActionUrl(facesContext, htmlForm);
...
writer.writeURIAttribute(HTML.ACTION_ATTR,
facesContext.getExternalContext().encodeActionURL(actionURL),
null);
and the method getActionUrl in HtmlRenderer says:
return viewHandler.getActionURL(facesContext, viewId);
So what's wrong with it? The Method viewHandler.getActionURL returns a URL that
is suitable for rendering (see the JavaDoc). This URL may not be a normal URL
as in my case with a wsrp portlet rendered on the producer server where the URL
look like this:
wsrp_rewrite?wsrp-urlType=blockingAction&wsrp-mode=wsrp%3Aview...
If you call encodeActionURL with such a URL the method
javax.portlet.PortletResponse.encodeURL(url) is called. This method checks for
either an absolute URL or full path URI. As both is not the case here, I get a
IllegalArgumentException.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.