4 способа передачи параметра со страницы JSF в бэк-компонент

4 способа передачи параметра из JSF-страницы в базовый компонент

Как я знаю, есть 4 способа передать значение параметра из JSF-страницы в бэк-компонент:

  1. Выражение метода (JSF 2.0)

  2. е: пары

  3. е: атрибут

  4. е: setPropertyActionListener

Давайте посмотрим пример один за другим:

1. Метод выражения

Начиная с JSF 2.0, вы можете передавать значение параметра в выражении метода, например,#\{bean.method(param)}.

Страница JSF…

Поддержка bean…

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

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

}

Note
Если вы развертываете приложение JSF в контейнере сервлетов, таком как Tomcat, убедитесь, что вы правильно включили «el-impl-2.2.jar». Подробнее читайте в этой статье -JSF 2.0 method expression caused error in Tomcat.

2. е: пары

Передайте значение параметра через тегf:param и получите его обратно через параметр запроса в резервном компоненте.

Страница JSF…


    

Поддержка bean…

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

    public String editAction() {

      Map params =
                FacesContext.getExternalContext().getRequestParameterMap();
      String action = params.get("action");
          //...

    }

}

Смотрите полныйf:param example здесь.

3. е: atribute

Передайте значение параметра через тегf:atribute и получите его обратно через прослушиватель действий в резервном компоненте.

Страница JSF…


    

Поддержка bean…

@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() {
    //...
  }

}

Смотрите полныйf:attribute example здесь.

4. е: setPropertyActionListener

Передайте значение параметра через тегf:setPropertyActionListener, он установит значение непосредственно в свойство вашего компонента поддержки.

Страница JSF…


    

Поддержка bean…

@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"
    }

}

Смотрите полныйf:setPropertyActionListener example здесь.

P.S Please share your idea, if you have any other ways :)