The RSF NavigationCase system is used to map out the navigation state changes that result from action cycles. In plain HTTP terms, every RSF POST submission results in a redirect to a GET view issues to the client, and the NavigationCase that matches the submission is used to determine the URL state in the resulting GET view.
The RSF NavigationCase system was originally inspired by the similarly-named scheme from JSF, but has become somewhat generalised.
In RSF, the most convenient way of reporting NavigationCases to the system is to report them from the producer responsible for rendering the view which contains the UICommand control generating the action cycle. This is done by implementing the extra interface NavigationCaseReporter in the producer, which reports a list of navigation cases.
Example #
public class AddItemProducer implements ViewComponentProducer, NavigationCaseReporter, ViewParamsReporter { public static final String VIEW_ID = "AddItem"; public String getViewID() { return VIEW_ID; } public void fillComponents(UIContainer tofill, ViewParameters viewparams, ComponentChecker checker) { ... UICommand.make(addupdateitem, "add-update-item", "#{itemsBean.processActionAdd}"); ... } public List reportNavigationCases() { List l = new ArrayList(); l.add(new NavigationCase("added", new SimpleViewParameters( ItemsProducer.VIEW_ID))); return l; }
In this example, we return a list consisting of a single NavigationCase, which will match when the return value from the method binding #{itemsBean.processActionAdd } on the single UICommand in this view equals "added".
public class ItemsBean { ... dependencies public String processActionAdd() { ... process addition return "added"; } }
In this case since there is just a single control, and a method binding which only ever returns the same result, we could have simplified the NavigationCase above to read only l.add(new NavigationCase(new SimpleViewParameters(ItemsProducer.VIEW_ID)));
Advanced uses#
Unless one is using some kind of flow system, one will stick to one of the arg-constructors for NavigationCase. The dedicated page on InformalFlows shows how to set the extra flowCondition field to take advantage of RSF's idiomatic yet powerful scheme for building up stateful flows incrementally.The navigation state determined by the NavigationCase system can be further fine-tuned by the use of an ActionResultInterceptor.