You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Jacob Scherrer (JIRA)" <de...@myfaces.apache.org> on 2006/11/02 23:14:16 UTC
[jira] Created: (MYFACES-1487) Wildcard navigation rule bug in
NavigationHandlerImpl
Wildcard navigation rule bug in NavigationHandlerImpl
-----------------------------------------------------
Key: MYFACES-1487
URL: http://issues.apache.org/jira/browse/MYFACES-1487
Project: MyFaces Core
Issue Type: Bug
Affects Versions: 1.1.4
Reporter: Jacob Scherrer
A navigation rule bug is present in NavigationHandlerImpl.calcMatchingNavigationCase(..)
The bug occurs in the following situation:
given the following navigation rules:
<navigation-rule>
<from-view-id>/foo.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/bar.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<navigation-case>
<from-action>#{randomBean.newFoobar}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/foobar.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Also:
#{randomBean.newFoobar} returns "success"
If you are in the view /foo.jsp and an action link calling #{randomBean.newFoobar} is clicked, the first navigation rule will be used. The reason is that the the rule's actionRef and the current actionRef are never compared, due to a logic error. This can be fixed by updating calcMatchingNavigationCase:
--snip--
if (((cazeOutcome == outcome) || (cazeOutcome != null && cazeOutcome.equals(outcome))) &&
((cazeActionRef == actionRef) || (cazeActionRef != null && cazeActionRef.equals(actionRef))))
{
return caze;
}
--snip--
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] Commented: (MYFACES-1487) Wildcard navigation rule bug in
NavigationHandlerImpl
Posted by "Mirko Pasqualini (JIRA)" <de...@myfaces.apache.org>.
[ https://issues.apache.org/jira/browse/MYFACES-1487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12494722 ]
Mirko Pasqualini commented on MYFACES-1487:
-------------------------------------------
Other bug occurs in the following situation:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<to-view-id>/pageNotFound.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>bar</from-outcome>
<to-view-id>/bar.jsp</to-view-id>
</navigation-case>
</navigation-rule>
When I request outcome "bar" method calcMatchingNavigationCase return first (right but not most maching!) case "/pageNotFound.jsp"
I'm using a workaround to temporally solve the problem:
private NavigationCase calcMatchingNavigationCase(List casesList, String actionRef, String outcome)
{
NavigationCase oneDefaultCase = null;
for (int i = 0, size = casesList.size(); i < size; i++)
{
NavigationCase caze = (NavigationCase)casesList.get(i);
String cazeOutcome = caze.getFromOutcome();
String cazeActionRef = caze.getFromAction();
// http://issues.apache.org/jira/browse/MYFACES-1487
// if (((cazeOutcome == outcome) || (cazeOutcome != null && cazeOutcome.equals(outcome))) &&
// ((cazeActionRef == actionRef) || (cazeActionRef != null && cazeActionRef.equals(actionRef)))) {
// return caze;
// }
if ((cazeOutcome == null || cazeOutcome.equals(outcome)) &&
(cazeActionRef == null || cazeActionRef.equals(actionRef)))
{
if (cazeOutcome == null ^ cazeActionRef == null)
return caze;
else
oneDefaultCase = caze;
}
}
return oneDefaultCase;
}
> Wildcard navigation rule bug in NavigationHandlerImpl
> -----------------------------------------------------
>
> Key: MYFACES-1487
> URL: https://issues.apache.org/jira/browse/MYFACES-1487
> Project: MyFaces Core
> Issue Type: Bug
> Affects Versions: 1.1.4
> Reporter: Jacob Scherrer
>
> A navigation rule bug is present in NavigationHandlerImpl.calcMatchingNavigationCase(..)
> The bug occurs in the following situation:
> given the following navigation rules:
> <navigation-rule>
> <from-view-id>/foo.jsp</from-view-id>
> <navigation-case>
> <from-outcome>success</from-outcome>
> <to-view-id>/bar.jsp</to-view-id>
> </navigation-case>
> </navigation-rule>
> <navigation-rule>
> <navigation-case>
> <from-action>#{randomBean.newFoobar}</from-action>
> <from-outcome>success</from-outcome>
> <to-view-id>/foobar.jsp</to-view-id>
> </navigation-case>
> </navigation-rule>
> Also:
> #{randomBean.newFoobar} returns "success"
> If you are in the view /foo.jsp and an action link calling #{randomBean.newFoobar} is clicked, the first navigation rule will be used. The reason is that the the rule's actionRef and the current actionRef are never compared, due to a logic error. This can be fixed by updating calcMatchingNavigationCase:
> --snip--
> if (((cazeOutcome == outcome) || (cazeOutcome != null && cazeOutcome.equals(outcome))) &&
> ((cazeActionRef == actionRef) || (cazeActionRef != null && cazeActionRef.equals(actionRef))))
> {
> return caze;
> }
> --snip--
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.