JsfGetRequests

The following steps have to be taken to make a JSF page basically RESTful, that is What this procedure does not change is the behaviour of the JSF links. This means that a "Open link in a new window" is still not possible.
 * calling the page via a HTTP GET request is possible
 * modifying the parameters in the URL is possible
 * bookmarking this page is possible

Usually, no changes in the JSPs/JSPFs are needed. Assuming you have the following
 * a source page with a form
 * a java bean for the source page containing an action method
 * a target page
 * a java bean for the target page containing an action method
 * a session- or request-scoped backing bean holding the parameters

Modify source bean action method to evaluate parameters and redirect to target page
// action method invoked by action link public String doSomething {       // some parameters String foo = this.fooInput.getSubmittedValue; boolean bar = "true".equals(this.barInput.getSubmittedValue); // change from // return this.getTargetBean.doMore; // to       FacesContext .getCurrentInstance .getExternalContext .redirect("myTargetPage.jsp?foo=" + urlEscape(foo) + "&bar=" + bar); return ""; }

Define parameters in target page bean
This can look something like this:

public class MyPage extends AbstractPageBean {       //...        public final static String URL_PARAM_FOO = "foo"; public final static String URL_PARAM_BAR = "bar"; //...   }

Catch Parameters in target page bean init method, add to session/request bean and execute action method
Like this:

public void init {       // Perform initializations inherited from our superclass super.init; //...       // get http request HttpServletRequest request = (HttpServletRequest)FacesContext .getCurrentInstance.getExternalContext.getRequest; // get parameters String foo = request.getParameter(targetPage.URL_PARAM_FOO); boolean bar = ("true".equals(request.getParameter(targetPage.URL_PARAM_BAR))); // fill backing bean mySessionBean.setFoo(foo); mySessionBean.setBar(bar); //...       // call action method this.processForm; }