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.
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.
If you see JSF 2.0 API there is no action
attribute for <h:button>
tag. <h:button>
is a new tag in JSF 2.0. You can declared the navigation outcome directly in the outcome
attribute, no need to call a bean to return an outcome like <h:commandButton>
.
But, if browser’s with JavaScript disabled, the navigation will failed, because the “h:button” tag is generate an “onclick” event to handle the navigation via window.location.href
.
<h:button value="buton" outcome="login" />
//HTML output
<input type="button"
onclick="window.location.href='/ContextRoot/faces/login.xhtml; return false;"
value="buton" />
Source : mkyong. My favorite website where you can find decent examples.
Excellent Blog for JSF : BalusC. A Hero to so many people on this forum:).
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