Search code examples
jsf-2navigationfaces-config

Programmatically get navigation case <to-view-id> from faces-config.xml by outcome


Is there any way to get the <to-view-id> of a navigation case in the backing bean?

Let's say I want to get the <to-view-id> from the outcome success, which is supposed to be page1.xhtml. Is there any helper function?

<navigation-rule>
    <from-view-id>start.xhtml</from-view-id>
    <navigation-case>
        <from-action>#{pageController.processPage1}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>page1.xhtml</to-view-id>
    </navigation-case>
    <navigation-case>
        <from-action>#{pageController.processPage2}</from-action>
        <from-outcome>success</from-outcome>
        <to-view-id>page2.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>  

If it helps, I'm using PrettyFaces.


Solution

  • You can get a NavigationCase, from a ConfigurableNavigationHandler. The NavigationCase represents a configured navigation case and you can get all the info you need from this object. Observe:

     ConfigurableNavigationHandler configNavHandler = (ConfigurableNavigationHandler)ctxt.getApplication().getNavigationHandler(); //assumes you already have an instance of FacesContext, named ctxt
     NavigationCase navCase = configNavHandler.getNavigationCase(ctxt,null,"success");
    
     String toViewId = navCase.getToViewId(ctx); // the <to-view-id>