JSF “from-action” navigation rule example

In JSF navigation rule, you may encounter a situation where two separate actions return a same “outcome” in a single page. In this case, you can use “from-action” element to differentiate the two navigation cases. See following example :

1. Managed Bean

A managed bean, with two actions which return a same outcome – “success”.

PageController.java


import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
 
@ManagedBean
@SessionScoped
public class PageController implements Serializable {
 
	private static final long serialVersionUID = 1L;
 
	public String processPage1(){
		return "success";
	}
	
	public String processPage2(){
		return "success";
	}
}

2. JSF Page

A JSF page, with 2 buttons linked to the above PageController‘s methods.

start.xhtml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"   
      xmlns:h="http://java.sun.com/jsf/html">
 
    <h:body>
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-2836379775501347"
     data-ad-slot="8821506761"
     data-ad-format="auto"
     data-ad-region="mkyongregion"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script><h2>This is start.xhtml</h2>
 
      <h:form>
    	<h:commandButton action="#{pageController.processPage1}" value="Page1" />
    	<h:commandButton action="#{pageController.processPage2}" value="Page2" />
      </h:form>
 
    </h:body>
</html>

Both actions will return the same “success” outcome, how JSF determine where to go?

3. Navigation Rule

To solve it, defines following navigation rules in the “faces-config.xml“, and use the “from-action” element to differentiate the same “outcome” navigation cases.

faces-config.xml


<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <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>	
</faces-config>

4. Demo

In above case, the button works like this :

  1. When button with action=”#{pageController.processPage1}” is clicked, it will return the “success” outcome and move to page1.xhtml
  2. When button with action=”#{pageController.processPage2}” is clicked, it will return the “success” outcome and move to page2.xhtml

Download Source Code

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

avatar
21 Comment threads
8 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
25 Comment authors
Ravi ChandimanesantoshArielDeepak Rathi Recent comment authors
newest oldest most voted
A
Guest
A

This example is bull shit.

Ravi Chand
Guest
Ravi Chand

My jsf project should also support url something like https://www.mkyong.com/{param}, can you please help me how to handle this.

imane
Guest
imane

thank you for your explanation
i have one question please:
should we put session scope for managed bean ?

Ariel
Guest
Ariel

#{userMBean.processPage1}
success1
/page1.xhtml

#{userMBean.processPage2}
success2
/page2.xhtml

vrb
Guest
vrb

http://www.mkyong.com/jsf2/how-to-delete-row-in-jsf-datatable/
delete button is not working.
It is saying method not found.
Please send an e-mail to me regarding the solution to this problem.
Thank You

JamesClintonLipinski@gmail.com
Guest
JamesClintonLipinski@gmail.com

It would be nice to know what to return on failure. Is it “fail” or “failure”? Maybe the example could be updated to include that.:)

grim leaper
Guest
grim leaper

It does not really matter. It is up to you. You can return arbitrary string from managed bean, e.g. “hello”, “goodbye”. Then you put into navigation-rule something like:

<navigation-case>
  ...
  <from-outcome>hello</from-outcome>
  <to-view-id>greetings.xhtml</to-view-id>
</navigation-case>
<navigation-case>
  ...
  <from-outcome>goodbye</from-outcome>
  <to-view-id>seeyou.xhtml</to-view-id>
</navigation-case>

Have one more look to the tutorial.

trackback
JSF 2.0 Tutorial

[…] JSF “form-action” navigation rule example In JSF navigation rule, you may encounter a situation where two separate actions return a same “outcome” in a page. In this case, you can use “form-action” element to differentiate the two navigation cases. […]

Sza?ek
Guest
Sza?ek

I have a problem. When I click button and I get the message on the same page:

Unable to find matching navigation case with from-view-id ‘/index.xhtml’ for action ‘#{pageController.processPage2}’ with outcome ‘success’

Sza?ek
Guest
Sza?ek

Sorry, I have problem in my code. Your code is ok.
Great Work..

Veera
Guest
Veera

Hi MKyong

Tutorial and the explanation is so good. But I am unable to find the replies for the questions posted. I think it will be very useful if discussions are answered.So who reads the tutorial will get perfect knowledge. One of the best tutorial i read…

Really Great Work….

Raghavendran
Guest
Raghavendran

Can i able to call a java method in navigation attribute?
Because i need to open a screen in the tab controller.

pls assist me..

nahiko
Guest
nahiko

Yes!! Just what I was looking for, it worked like a charm!!

Thanks so much, I just needed to set some values to some variables before navigating through pages.

I changed my code, and the very first time I tried it, it worked :)

Cheers!!

xcom
Guest
xcom

no navigation case match for view id action bean and outcome sucess

Ahmed Adel
Guest
Ahmed Adel

Thank you very much

trackback
JSF 2.0 Tutorial « java config

[…] JSF “form-action” navigation rule example In JSF navigation rule, you may encounter a situation where two separate actions return a same “outcome” in a page. In this case, you can use “form-action” element to differentiate the two navigation cases. […]

Shirish
Guest
Shirish

Hi Mkyong,

I have following Dir structure

For admin pages

Pages/users/page1.xhtml
Pages/users/page1.xhtml
Pages/admin/page1.xhtml
Pages/admin/page1.xhtml

When I am selecting user page from admin pages, I am not able to access user pages.

Please note that as I am using JSF2, I am providing page name in bean instead of faces-confin.xml

Thanks
Shirish
Suganya
Guest
Suganya

Hai mkyong,
when i clicked page1 it shows success and same t0 page2…how to get the content of the pages

ashish
Guest
ashish

not working … some problem in this…..

ashish
Guest
ashish

mr mkyong … i’m using from-action not form-action ….. but still it gives an error

Unable to find matching navigation case with from-view-id ‘/index.xhtml’ for action ‘#{myBean.move3}’ with outcome ‘success’

Alberto
Guest
Alberto

Hi,

I tried the example in Tomcat 7 but I got the error:

GRAVE: Critical error during deployment:
java.lang.LinkageError: loader constraint violation: when resolving interface method “javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;” the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature

tommcatt28
Guest
tommcatt28

HI DEAR MKYONG…

I HAVE THIS PROBLEM……I NEED THAT When button with action=”#{“”}” is clicked, it will return the “success” outcome and move to “”.xhtml BUT THE ECLIPSE THROWS ME THE NEXT EXCEPTION:

Caused by: javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException: /ICEfacesPage1.xhtml @48,81 action=”#{usuario.getSubmit()}”: Método no hallado: clases.Leausuario@a449e0.getSubmit()
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:92)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
… 23 more

I NEED HELP MY FRIEND……

Renato Cesar
Guest
Renato Cesar

There is a very little mistake in this tutorial. The tag is called FROM-ACTION and not FORM-ACTION. And I’m just saying that because I liked very much this tutorial and would like to make it better.

inetryconydot
Guest
inetryconydot

[URL=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical][b]Order Cheapest [color=red]Xenical[/color] High Quality![/b][/URL] [URL=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical][b]Buy cheap [color=red]Xenical[/color] online without a prescription! ![/b][/URL] [url=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical][img]http://rebizsearch.com/dfiles/19.gif[/img][/url] [color=green]* Secure ordering! * Free Shipping Worldwide * Lowest price guaranteed! * Fully licensed pharmacy * NO PRESCRIPTION REQUIRED * Superior customer service 24/7 — Very easy to get Xenical online! * 100% Satisfaction Guaranteed * We accept: VISA, MasterCard, E-check, AMEX and more.[/color] [URL=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical][color=red][b]>>> Buy Xenical Right Now <<<[/b][/color][/URL] [url=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical][img]http://rebizsearch.com/thumbs/961_big.jpg[/img][/url] [b]Xenical (Orlistat)[/b] is recommended and prescribed by pharmacists as a weight loss medication that targets the absorption of fat in your body rather than suppressing your appetite. [URL=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical]::.. Description[/URL] [URL=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical]::.. Delivery[/URL] [URL=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical]::.. Prices[/URL] [URL=http://rebizsearch.com/in.cgi?5&group=BgMeds&parameter=Xenical]::.. Recommendations[/URL]… Read more »