Index: core-library/src/java/org/apache/shale/dialog/faces/DialogNavigationHandler.java =================================================================== --- core-library/src/java/org/apache/shale/dialog/faces/DialogNavigationHandler.java (revision 314932) +++ core-library/src/java/org/apache/shale/dialog/faces/DialogNavigationHandler.java (working copy) @@ -174,6 +174,12 @@ ",outcome=" + outcome + ")"); } + if (outcome == null) + { + handler.handleNavigation(context, fromAction, outcome); + return; + } + // If we are not executing a dialog, delegate to the standard handler // unless the outcome starts with our prefix to start a dialog Status status = getStatus(context, false); @@ -279,8 +285,10 @@ assert context != null; Map map = context.getExternalContext().getSessionMap(); + String key = getStatusKey(context); assert key != null; + Status status = (Status) map.get(key); if (create && (status == null)) { status = new StatusImpl(); @@ -467,10 +475,6 @@ * if there is none, check for a global {@link Transition} associated with * the {@link Dialog} that owns the origin {@link State}.

* - *

NOTE For consistency with standard JavaServer Faces - * navigation, transition from a {@link ViewState} with a null - * outcome stays in the same {@link ViewState}.

- * * @param status Current {@link Status} for this user * @param state Current {@link State} for this user * @param outcome Logical outcome used to select next {@link State} @@ -485,18 +489,19 @@ } // Transition from a view state with a null transition means stay where we are - if ((state instanceof ViewState) && (outcome == null)) { - if (log.isDebugEnabled()) { - log.debug(" --> Stay in current state"); - } - return state; - } +// if ((state instanceof ViewState) && (outcome == null)) { +// if (log.isDebugEnabled()) { +// log.debug(" --> Stay in current state"); +// } +// return state; +// } // Identify the appropriate Transition Transition transition = state.findTransition(outcome); if (transition == null) { transition = state.getDialog().findTransition(outcome); } + if (transition == null) { throw new IllegalArgumentException (status.peek().toString() + ",outcome=" + outcome);