Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JSF Action vs Outcome Attribute

Tags:

jsf

jsf-2

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.

like image 931
dev Avatar asked Feb 22 '13 23:02

dev


2 Answers

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.

like image 200
Xtreme Biker Avatar answered Sep 21 '22 09:09

Xtreme Biker


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:).

like image 29
SRy Avatar answered Sep 18 '22 09:09

SRy