You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org> on 2009/11/06 02:46:32 UTC

[jira] Updated: (MYFACES-1877) DefaultViewHandlerSupport does not use the servlet path and path info request attributes when processing a Servlet/JSP include

     [ https://issues.apache.org/jira/browse/MYFACES-1877?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Leonardo Uribe updated MYFACES-1877:
------------------------------------

    Resolution: Invalid
      Assignee: Leonardo Uribe
        Status: Resolved  (was: Patch Available)

After testing several combinations like this:

<%
request.getRequestDispatcher("/home.jsf").include(request,response);
%>

of this

<jsp:include page="home.jsf">

or this

<jsp:include page="faces/home.jsp">

It was evident that all this operations are invalid. In other words it is not valid to include jsf pages from "outside" jsf using servlet/jsp include. The reason why DefaultViewHandlerSupport.getFacesServletMapping(FacesContext) uses externalContext.getRequestPathInfo()/getRequestServletPath() is that it is supposed the "main" page is a jsf page. 

I tried add this proposed code but jsp compiler throws FileNotFoundException, because it uses javax.servlet.include.servlet_path and javax.servlet.include.path_info to derive the uri to find the .jsp file used.

> DefaultViewHandlerSupport does not use the servlet path and path info request attributes when processing a Servlet/JSP include
> ------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-1877
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1877
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 1.2.3
>            Reporter: Mathieu Vézeau
>            Assignee: Leonardo Uribe
>         Attachments: patch.txt
>
>
> When MyFaces is processing a Servlet/JSP include, the method DefaultViewHandlerSupport.getFacesServletMapping() does not take into account the servlet path and path info that are passed as request attributes (namely, javax.servlet.include.servlet_path and javax.servlet.include.path_info). Instead, the method takes the values directly from externalContext.getRequestServletPath() and externalContext.getRequestPathInfo(), ignoring the request attributes that could overwrite them. However, these attributes are taken into account when the original view id is calculated (see DefaultRestoreViewSupport.calculateViewId()), so there seems to be a mismatch between these two behaviors.
> As a result, in situations where the servlet path or path info passed as request attributes are different from their original values in the request, MyFaces may not be able to find the appropriate mapping and may also skip the suffix substitution even when it should occur (see DefaultViewHandlerSupport.calculateViewId()). But since the original view id was calculated correctly as explained above, using the attribute overwrites, but the suffix .jsf is not changed to .jsp as it should, it results in an infinite loop as MyFaces keeps calling itself instead of calling the JSP processor.
> The solution is to modify DefaultViewHandlerSupport.getFacesServletMapping() to take into account the servlet path / path info request attributes just like DefaultRestoreViewSupport.calculateViewId() does.

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