myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eduardo Breijo (JIRA)" <>
Subject [jira] [Commented] (MYFACES-4183) Behavior difference between JSF 2.2 and JSF 2.3 when using facelet prefixes
Date Thu, 04 Jan 2018 19:58:00 GMT


Eduardo Breijo commented on MYFACES-4183:

I found that this doesn't have to do with extensionless mapping views. After debugging, I
found that on MyFaces 2.3, VDL is returning null in ViewHandlerImpl.createView resulting in
a 404 error. This is because JspViewDeclarationLanguageStrategy.handles changed from MyFaces
2.2 to MyFaces 2.3. 

Previously we were always returning true, as a result VDL was set to JspViewDeclarationLanguage,
and when JspViewDeclarationLanguageBase.renderView() calls buildView method from JSPViewDeclarationLanguage,
a dispatch with "/page1.jsf" is made, then we go through the servlet container and we end
up at the TestServlet since that matches the "*.jsf" mapping.

I have tested this same scenario using Mojarra 2.3 and it works fine, the behavior is the
same as MyFaces 2.0 and MyFaces 2.2.

With the change made in MyFaces 2.3 under,
the JspViewDeclarationLanguageStrategy.handles changed, leading to the regression described
in this issue.

I have provided a patch, changing JspViewDeclarationLanguageStrategy.handles to what we have
in JSF 2.0 and JSF 2.2.

> Behavior difference between JSF 2.2 and JSF 2.3 when using facelet prefixes
> ---------------------------------------------------------------------------
>                 Key: MYFACES-4183
>                 URL:
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-372
>    Affects Versions: 2.3.0-beta
>            Reporter: Eduardo Breijo
>            Assignee: Eduardo Breijo
>            Priority: Minor
>         Attachments: JSF20FacesConfigAnotherServlet.war, MYFACES-4183.patch
> There is a difference in behavior between JSF 2.2 and JSF 2.3 when using facelet prefixes.
> I have a sample app that demonstrate this behavior difference. In the app we just define
a random servlet and map it to the same prefixes we would normally map to the FacesServlet.
We don't map /faces/* to the testServlet but it is automatically added to the FacesServlet,
so if you drove a request to something other than .jsf (testServlet) or *.faces (testServlet)
the FacesServlet would be invoked for all of the prefix mappings of /faces/*. So that would
mean you should see TEST SERVLET printed for the suffix mapping (.jsf and .faces) and then
the page1 should be rendered for /faces/*. 
> When you drive a request to: http://localhost:8080/JSF20FacesConfigAnotherServlet/faces/page1.jsf
> On JSF 2.2: You should see an output of "TEST SERVLET". So it ensures that .jsf mapping
is invoking the testServlet.
> On JSF 2.3: You get a 404, page1.jsf not found. I think that in the case of JSF 2.3,
it is invoking the FacesServlet but can't find the .jsf file because it doesn't actually exist.

This message was sent by Atlassian JIRA

View raw message