Passing Values from page to other page JSF

20,962

Solution 1

There are several ways for doing this, but here is one of them. You will need to save the inputText value into a property of your bean and both your h:inputText and your h:commanButton should be in the same h:form element

Here is a sample code

In your view

<h:form>
    ...
    <h:inputText value={myBean.someValue} />
    ....
    <h:commandButton value="Next" action="#{myBean.execute()}"/>
</h:form>

Your managed bean should be at least session scoped if you want your property (someValue) to be available in different pages. The content of the managed bean should look like this also:

private String someValue;

// Getter and setter for `someValue`

public String execute() {
    // ...
    return "/Quizy.xhtml?faces-redirect=true";
}

In the second page if you want to retrieve that value, just use #{myBean.someValue}

Solution 2

Here are 4 other ways to pass a parameter value from JSF page to other page JSF :

1- Method expression (JSF 2.0)
2- f:param
3- f:attribute
4- f:setPropertyActionListener

1. Method expression

Since JSF 2.0, you are allow to pass parameter value in the method expression like this #{bean.method(param)}.

JSF page

<h:commandButton action="#{user.editAction(delete)}" />

ManagedBean

@ManagedBean(name="user")
@SessionScoped
public class UserBean{

    public String editAction(String id) {
      //id = "delete"
    }

}

2- f:param

Pass parameter value via f:param tag and get it back via request parameter in backing bean.

JSF page

<h:commandButton action="#{user.editAction}">
        <f:param name="action" value="delete" />
</h:commandButton>

ManagedBean

@ManagedBean(name="user")
@SessionScoped
public class UserBean{

    public String editAction() {

      Map<String,String> params = 
                FacesContext.getExternalContext().getRequestParameterMap();
      String action = params.get("action");
          //...
    }
}

3. f:atribute

Pass parameter value via f:atribute tag and get it back via action listener in backing bean.

JSF page

<h:commandButton action="#{user.editAction}" actionListener="#{user.attrListener}"> 
    <f:attribute name="action" value="delete" />
</h:commandButton>

ManagedBean

@ManagedBean(name="user")
@SessionScoped
public class UserBean{

  String action;

  //action listener event
  public void attrListener(ActionEvent event){ 
    action = (String)event.getComponent().getAttributes().get("action"); 
  }

  public String editAction() {
    //...
  }   
}

4. f:setPropertyActionListener

Pass parameter value via f:setPropertyActionListener tag, it will set the value directly into your backing bean property.

JSF page

<h:commandButton action="#{user.editAction}" >
    <f:setPropertyActionListener target="#{user.action}" value="delete" />
</h:commandButton>

ManagedBean

@ManagedBean(name="user")
@SessionScoped
public class UserBean{

    public String action;

    public void setAction(String action) {
        this.action = action;
    }

    public String editAction() {
       //now action property contains "delete"
    }   

}
Share:
20,962

Related videos on Youtube

Ahmad Issa
Author by

Ahmad Issa

Updated on August 13, 2020

Comments

  • Ahmad Issa
    Ahmad Issa over 3 years

    I am beginner in java server faces (JSF), I need to pass the content of text input to second page to display it, the same applies for the second page: I want to pass radio buttons values to a third page. I searched and tried a lot without success. For example I tried

     <h:commandButton value="Next" action="#{myBean.execute(input_id.value)}"/>
    

    Execute method is:

    public void execute(String value) {
    // ...
    
        try{
             FacesContext.getCurrentInstance().getExternalContext().dispatch("/Quizy.xhtml?faces-redirect=true");
        }
        catch(Exception e){
            System.out.println("err");    
        }  
    }
    

    Any suggestions?

  • Ahmad Issa
    Ahmad Issa almost 8 years
    But I think that execute() should return String not void !
  • tfosra
    tfosra almost 8 years
    You are welcome. I will edit my answer to do a return String
  • Ted Spradley
    Ted Spradley about 3 years
    Is attribution due to Mykong for this 2012 verbatim post? mkyong.com/jsf2/…

Related