[ 
https://issues.apache.org/jira/browse/MYFACES-3313?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13123039#comment-13123039
 ] 

Leonardo Uribe commented on MYFACES-3313:
-----------------------------------------

I checked the spec finally I found this on section JSF 2.0 section 7.5.2 
Default ViewHandler Implementation:

"... The getActionURL() method must fulfill the following responsibilities: ...
 .... If the argument viewId has an extension, and this extension is mapping, 
the result is contextPath + viewId. For example “/cardemo/chooseLocale.faces" 
..."

So the example proposed is on the spec. I agree use /page01.jsf is bad practice 
because the effective viewId when the view is created is /page01.xhtml . It is 
a long story, but at the end a change was introduced in JSF 2.1 to 
differentiate between physical and logical view ids 
(ViewHandler.deriveLogicalViewId). 

Anyway, since this is described on the spec we should fix our implementation of 
getActionURL() method.
                
> Calculation of redirect URL does not preserve the extension used in Faces 
> Servlet mapping
> -----------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3313
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3313
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 2.1.2, 2.1.3
>            Reporter: Deryk Sinotte
>
> I have a simple navigation test case that does a navigation between two 
> pages.  Both pages have the same simple markup:
>   <h:body>
>     <h2>Page 01</h2>
>     <h:form>
>       <h:commandButton id="navButton" 
>                        value="Nav"
>                        action="#{testBean.lastPage}" />
>     </h:form>
>   </h:body>
> The backing bean methods simply return the appropriate action outcome:
>     public String lastPage(){
>         return "lastPage";
>     }
> And the faces-config file has the following navigation rules:
>     <navigation-rule>
>         <from-view-id>*</from-view-id>
>         <navigation-case>
>             <from-outcome>lastPage</from-outcome>
>             <to-view-id>/page02.jsf</to-view-id>
>             <redirect/>
>         </navigation-case>
>         <navigation-case>
>             <from-outcome>firstPage</from-outcome>
>             <to-view-id>/page01.jsf</to-view-id>
>             <redirect/>
>         </navigation-case>
>     </navigation-rule>
> The web.xml has a servlet mapping for .jsf files:
>     <servlet-mapping>
>         <servlet-name>Faces Servlet</servlet-name>
>         <url-pattern>*.jsf</url-pattern>
>     </servlet-mapping>
> If I go to the page01.jsf, the page loads fine.  When I click the "Nav" 
> button, the navigation occurs but the URL is page02.xhtml rather than 
> page02.jsf.  Because the extension is not preserved and there is no mapping 
> for .xhtml in this case, the page doesn't get handled by the Faces Servlet.  
> The current version of Mojarra (2.1.3) does preserve the extension when the 
> redirect URL is encoded.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to