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 .
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..
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.
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
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:
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));
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: