GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

JSF - parametros via GET [RESOLVIDO]

  Boa tarde galera, estou tendo algumas duvidas se alguem poder me ajudar agradeço.

  Estou desenvolvendo um CRUD onde tenho uma lista de parceiros , cada parceiro tem 0 ou muitas publicações. 

Estou tentando passar o id do parceiro via get para o metodo do controller fazer a consulta do parceiro e de suas publicações. Obs. estou utilizando RequestScoped .

   <f:param value="#{parceiroController.parceiro.id}" name="id"/>  

no controller tenho um metodo onde recupero o valor, realizo a procura e retorno a string da pagina que quero renderizar.


        String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));  
        this.parceiro =  ParceiroDao.getParceiro(Long.parseLong(id));
        
        return "publicacoes";
Agora a minha duvida e problema, quando utilizo o return "publicacoes" ele perde os dados setados em this.parceiro, quando carrega a view publicacoes.jsf.  Teria alguma forma de melhorar esse processo sem utilizar o SessionScoped , pois utilizando SessionScoped em tudo acabaria deixando a aplicação lenta.. 

fico no aguardo … Valeu

Eu aconselho a usar SessionScope em seus managedbeans.
Não entendi por que você disse que manter os managedbeans na sessão deixaria a aplicação lenta?
Na verdade não deixa na verdade consome um pouco mais de memória mas é até mais rápido
pois não fica recriando o objeto a cada Request, porém é inperceptívele o consumo de memória
não é nada mostruoso, só deve se cuida para limpar os managedbean para não conter dados incorretos ou antigos
o que costumo fazer é recriar o managedbean cada vez que o usuário entra na tela pelo menu.

obrigado marcosharbs , entendi a parte de SessionScoped… você poderia me ajudar com a parte de parametros via get?

exemplo :

http://localhost/publicacoes.jsf?parceiro=12

como recuperar… teria que realizar a busca no construtor?

Vlw

Passar parâmetros via get eu teria que pesquisar mas para passar parâmetros você poderia usar o código abaixo:

<h:commandButton action="#{managedBean.onAction}"
                             value="Meu Botão">

    <f:setPropertyActionListener value="#{elemento}" 
                                            target="#{managedBean.parametro}" />
</h:commandButton>

Este código acima fará o seguinte ele irá renderizar um botão que ao ser clicado irá setar
em managedBean.parametro o valor de element e então executar a ação onAction no seu managedBean.

No JSF 2.0 você ainda poderia passar como parâmetro na chamda do método como abaixo

<h:commandButton action="#{managedBean.onAction(parametro)}"
                             value="Meu Botão"/>

Galera Consegui resolver…

Vou postar aqui… li que não é uma boa prática recuperar paramentros via get no jsf, porem todo sistema tem hora que precisa utilizar parametros via GET, devido a facilidade de repassar a URL, segue abaixo os trechos de códigos utilizados:

Utilizei esta código para enviar o id do parceiro via get
[http://localhost/projeto/publicacoes.jsf?id=3]

&lt;h:outputLink value="publicacoes.jsf"&gt;
      &lt;h:outputText value="Listar Publicações"/&gt;
      &lt;f:param value="#{parceiroController.parceiro.id}" name="id"/&gt;    
&lt;/h:outputLink&gt;

No controller utilizei este trecho, onde recupero o id passado por GET , realizo a consulta no banco e atribuo ao atributo parceiro.
Lembrando que estou utilizando RequestScoped , devido ao uso de memória.

      String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"));    
      this.parceiro =  ParceiroDao.getParceiro(Long.parseLong(id));  

Na view publicacoes.jsf


     &lt;fieldset&gt;
          &lt;legend&gt;Dados do Parceiro&lt;/legend&gt;
          &lt;h:outputText value="Nome:"/&gt;
          &lt;h:outputText value="paceiroController.parceiro.nome"/&gt;

          .....

     &lt;/fieldset&gt;

     &lt;fieldset&gt;
          &lt;legend&gt;Publicacões&lt;/legend&gt;
          &lt;h:dataTable var="parc" value="parceiroController.parceiro.publicacoes"&gt;

              ....

          &lt;/h:dataTable&gt;
     &lt;/fieldset&gt;

:arrow: Não sei se é a melhor maneira… se alguem tiver uma melhor forma de realizar este procedimento favor postar…

Valeu

Ah…entendi. Voce recebe seus parametros na propria view “publicacoes”, correto? Lê o parametro do GET e seta o seu atributo que será lido na pag.

Não vejo problema sobre a “má pratica”, eu faço isso aí o tempo todo :lol:. Eventualmente voce pode usar algum framework para deixar sua URL mais amigável, como:

http://localhost/projeto/publicacoes/3

Mete um RESOLVIDO no tópico e vamos que vamos…

pode usar o prettyfaces para deixar mais amigavel !

Valeu Galera

[quote=honjoya]obrigado marcosharbs , entendi a parte de SessionScoped… você poderia me ajudar com a parte de parametros via get?

exemplo :

http://localhost/publicacoes.jsf?parceiro=12

como recuperar… teria que realizar a busca no construtor?

Vlw[/quote]

Cara, nao entendi o problema. Você já nao está recuperando os valores do request, no seu codigo inicial?

O que voce quer é submeter e depois exibir a mesma pagina?

//