JSF Action vs Outcome Attribute

jsf, jsf-2

Solution

Difference is that while action defines a server method to be executed, outcome specifies a view-id which will be destination of your page. You must use JSF inputs depending on the goal you're trying to achieve:

- `<h:button outcome="user-management">` targets you to the user management page. Imagine it as kind of link.

- `<h:commandButton action="#{backingBean.goToUserManagement}"` If you return "user-management" in your action method, is doing the same as the outcome but it allows you to execute some logic into the server side. It must be embedded into a `h:form` tag.

Also there's no difference between `<h:button outcome="user-management">` or `<h:button outcome="#{backingBean.userManagementNavigationResult}">`, as far as your server side getter method returns "user-management" value.

Problem

I'm new to JSF and am trying to understand what the difference is between the action vs the outcome attributes? This is not the difference between buttons and command buttons, but between outcome vs action attributes on the same button tag. For instance, I can have: ``` <h:button value="Go" outcome="<value>" /> ``` or ``` <h:button value="Go" action="<value>" /> ``` I'm not sure when to use which one. Also, does it make a difference if `<value>` is `<#{bean.methodThatReturnsStringInNavigationRule}>` or `<string literal in navigation rule>`? Thank you.

Original source