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
Anúncios

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 )

w

Conectando a %s