I was considering using explicit page navigation rules in my web app when I came accross this SO question/answer, with the following excerpted from it:
...navigation rules are obsolete since JSF 2.0 thanks to the new "implicit navigation" feature.
However, I've gone through most of the CoreServlets JSF 2.0 tutorial, and it has a section devoted to explicit page navigation, and it talks favorably about it. Either this goes against the above recommedation, or am I misinterpreting something.
I don't want to create a new web app in an obsolete manner. Can anyone shed any light?
This is somewhat subjective, but ala, it boils down to the following:
Navigation rules in XML are a maintenance hell.
Using navigation rules suggests that the web application in question suffers from the "one URL behind" problem which causes bad user experience (pages are not bookmarkable).
Using navigation rules suggests that the web application in question is using POST for page-to-page navigation which causes not only bad user experience (pages are not bookmarkable), but also bad SEO (bots don't index POST, hence POST-navigated pages are unreachable for public search engines).
From a purely technical point of view navigation rules are not obsolete, as-in that neither the spec nor any API marks them as being obsolete, deprecated or a candidate to be pruned.
In fact, they have gotten somewhat of a revival in JSF 2.2 with the Faces Flow feature for reusable modules.
That said in practice and surely when the Faces Flow feature is not used I've never seen much use for navigation rules in XML. They would theoretically make maintenance easier (IIRC that's one of their original design goals), but in practice as BalusC mentions it only causes maintenance hell.
But as BalusC also mentioned, it IS subjective. Some people still actually like to primarily define managed beans, injections (wiring), entity mappings and what have you in XML instead of with annotations (and with XML only as possible override or for global things).
In my opinion navigation rules mainly reflect the initial attempt of JSF to abstract too much from HTTP and present a higher level desktop-like programming model. In that model redirecting to a URL with query parameters and all did not really had a place. For some time now (starting with JSF 2.0) JSF has moved into a more middle ground model, where plain GET requests and PRG (Post-Redirect-GET) is much more embraced. Following this new model you could indeed say that navigation rules have no place, i.e. are effectively obsolete.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With