Passando objetos de uma view para outra no JSF 2

Olá, estou com um problema no JSF 2. Não consigo passar um objeto de uma view para outra através do redirecionamento, já tentei usar ui:param e nada, o que relmetne passava eram valores estaticos. Gostaria de saber se existe alguma forma de passar os objetos de uma view para outra. Desde já agradeço!

Não intendi o que vc quer…

teria como explicar melhor…

colocando o objeto na sessão vc pega ele em qualquer view, depois destroi ele

Acho que expressei mal. O que eu quero é que numa view em que eu trago do banco objetos e coloco numa dataTable, em cada linha eu tenha um link que me redireciona pra uma outra view só que trazendo pelo menos uma informação desse objeto. Pelo que eu entendo o ao redirecionar, o JSF faz um novo request e limpa a arvore deixando meu bean vazio, existe uma maneira de manter o objeto passado?

Pelo que eu intendi seria próximo ao clássico “alterar” aonde o usuário clica na linha da tabela ,e assim é redirecionado para outra pagina com o objeto escolhido na tabela…

se for isto ao clicar na tabela vc pode usar o f:param para passar o id do objeto…

ai no bean vc faz um “compara” com o List para pegar o objeto por inteiro

Isso mesmo, tava pensando em fazer isso, mas deixei por ultima opção pois eu teria que ir pro meu controller, acessar um metodo de buscar o objeto em questão retornar pra outra view. Uma solução mesmo que eu queria seria somente envolvendo minha view, mas como não tenho opção por enquanto, vou usar a sua logica, obrigado pelas respostas, qualquer resultado eu posto aqui, vlw!!!

TALVEZ O <t:updateActionListener (myfaces)

consegui jogar o objeto inteiro, assim vc só faz o redirecionamento

se não vc faz um por um

<t:updateActionListener property="#{home.usuario.cpf}“
value=”#{ent.cpf}" />

não seria uma solução muito elegante mais , seria mais próximo do que vc quer

ainda vc pode tenta o <f:setPropertyActionListener

depois posta ai

abraços

Tem como passar um ojeto inteiro pelo commandoButton, tanto para editar, como excluir, por exemplo.

 <h:commandoButton actionListener="#{bean.editar(objeto)}" update="frmFormulario"/> //desse modo, no metodo do Bean, basta passar o Objeto como parametro tb

Bean:

public void editar(Objeto objeto) {
this.objeto = objeto;
//e aqui poe toda a regra de negocio q queira fazer
    }

Desse modo vc n precisa passar campo por campo nem fazer a comparacao com o List e tals.

muito bom isto né {bean.editar(objeto)} temque tomar cuidado que isso é só para o JSF 2

e eu ACHO que no caso dele, seria uma “preEditar” e ele não qué chamar nenhum metodo no bean no botão da tabela,

ele apenas que passa o objeto para o bean e ir para pagina de alterar aonde a pagina está “ligado” com objeto atualizado no bean…

É o que eu intendi ;D

o que rachid disse pra fazer eu já implemento que é questão de remover, editar na propria view. O que erick disse tah certo, o que eu quero mesmo é redirecionar pra uma outra view, passando o objeto que tah na minha dataTable, sem que eu perca esse objeto quando o JSF 2 limpa as arvores, vou tentar a sua solução aki erick, com essa tag, vlw!!!

Eu lembro que eu fiz com o <f:setPropety… só q não conseguia passar o objeto!!!

é…
usando o
f:setPropertyActionListener
seria passar atributo por atributo tbm… tenso =/

Erick , eu pensei em uma solução aqui, que seria deixar minha mb em sessionscoped, conseguir passar o objeto da view para outra. Só que achei meio que estranho minha mb está em com esse escopo. O que eu tô pensando agora é criar uma outra mb que esteja em sessionscoped para que ela guarde meu objeto. Qualquer outra soluçao você posta aew, vlw!!!

Não acho legal isto, talvez o JSF ainda não tenha esse mecanismo de passar “DIRETO” o objeto para MB , sem acessar um metodo…

vc conseguiu passar o objeto direto para MB?

Ai é só usar o ViewScoped

Erick, o que eu fiz foi criar uma classe “guardaObjetoHipotetico” e coloquei o escopo dela como session scoped, na minha datatable que eu tenho o link para “enviar” o objeto, eu fiz um <f:setProperty… que tem como alvo um metodo dessa classe e que por sua vez guarda “seta” o objeto na variavel do meu bean que está em sessionscoped. Tecnicamente não estou passando um objeto diretamente pra view, eu envio pra o bean que eu criei e depois esse bean faz um set desse objeto e depois na outra view eu faço ele mostrar o objeto que veio da view inicial. Minha solução foi essa, achei um pouco estranho pq toh guardando um objeto na session, mas tenho que ver se isto afeta, se bem que esse obejto é só pra eu ter uma referencia dele. Pensei em outras alternativas, só que essa foi a que deu certo, qualquer outra solução ou critica quanto a minha solução você pode falar.
vlw aew!!!

Cara,

É bem mais interessante fazer do jeito “classico” do que fazer isto que vc fez…

Certo? muita coisa apenas para passar o objeto para MB…

claro se tivesse um "t:updateActionListener " que passava o objeto “INTEIRO” para o MB , ai era só vc navegar para outra view, mais até aonde eu conheço não é possivel, diante disso seria usar o f:param msm ou fazer igual o rachid.calazans disse, caso contrario vc esta fazendo trabalho a mais sem necessidade…

mais isso é vc que decide ;D

flwss…

Cara , blz? então tem um jeito de passar o objeto inteiro para o Bean sem chamar metodo algum.

usa o <t:updateActionListener e implementa a propriedade “converter”

funciona certinho ;D

To passando por este problema. Conseguiram a solução?

Pra quem precisar:

Colocando o objeto na sessão

FacesContext fc = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) fc.getExternalContext().getSession(true);
session.setAttribute("clienteAux", this.clienteAux );

Pegando o objeto da sessão

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
HttpSession session = (HttpSession) request.getSession();
Cliente c = session.getAttribute("clienteAux"));

Pode usar também a injeção de dependência do jsf, mas estou conseguindo mais rápido dessa forma ai…!