Enviando parametros em RequestScope

O RequestScope do JSF tem apenas a duração de uma solicitação HTTP ou seja na troca páginas ou execuções na mesma página o managed bean anotado com @requestScope perderá os valores em seus atributos.
Uma das maneiras de solucionar esse problema é utilizar a anotação @ManagedProperty para injetar o atributo enviado por f:param através de outra requisição.
Segue abaixo um 2 exemplos onde vão mostrar como enviar um valor de uma página para outra utilizando ResquestScope.

1 – Enviando um valor fixo no xhtml :

RequestController.java

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

@RequestScoped
@ManagedBean(name = "requestController" )
public class RequestController implements Serializable {

    private static final long serialVersionUID = 1L;

    @ManagedProperty("#{param.parametro}") 
    private String parametro;

       // gets and sets

Observação :
O @ManagedProperty é composto por “param” que é o map de parametro request do JSF (FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap())  + o nome do atributo enviado no xhtml (f:param name=””).

enviar-parametro.xhtml

<h:form>
    <h:commandButton value="Enviar" action="/pages/ver-parametro">
        <f:param name="parametro" value="10"/>
    </h:commandButton>
</form>      

ver-parametro.xhtml

<h:form>
    <h:inputText value="#{requestController.parametro}" />
</form>

2 – Enviando um valor vindo de um inputText da página:

RequestController.java

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

@RequestScoped
@ManagedBean(name = "requestController" )
public class RequestController implements Serializable {

    private static final long serialVersionUID = 1L;

    @ManagedProperty("#{param.parametro}") 
    private String parametro;

    public String setWithRedirect() {
        return "/pages/ver-parametro?parametro="
          +this.parametro+"?faces-redirect=true"; 
    }

       // gets and sets


enviar-parametro.xhtml

<h:form>
   <h:outputText value="Valor do parametro: " />
   <h:inputText value="#{requestController.parametro}" />

   <h:commandButton value="Enviar" action="#{requestController.redirecionar"/>
</form>

ver-parametro.xhtml

<h:form>
    <h:inputText value="#{requestController.parametro}" disabled="true" />
</form>

Observação :

  • f:param envia os valores por GET
  • f:param por enviar paramos por GET não pode ser enviado objetos apenas tipos primitivos

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.