Vraptor3 escopo e objetos [problemas]

6 respostas
Vmaia

Salve galera!!

Estou tento um problema na hora de resgatar um objeto que estou incluido do jsp …

Tenho uma jsp/Controller que após submetido me redireciona para uma outro logica dentro de outro Controller que dispara uma POP-UP.

Incluo o objeto desta forma no POP-UP, para logo em seguida atraves do jstl possa preencher(ou não) minha jsp.

Até aqui tudo ocorre como o devido.

Há dois formularios no POP-UP, cada um deles leva a um serviço de impressão em pdf, para que a impressão ocorra é necessario que este objeto seja passado para o metodoController responsável (eu não achei forma de passar isso como um property do form, bem… eu não quero criar input por input de cada atributo do objeto - se existir algum jeito de passar o objeto completo seria muito legal!!!)

Para poder obter o objeto, no momento, estou setando assim… httpSession…

Porem não estou conseguindo obete-lo a todo instante que desejo.
Após um dos form ser submetido abra-se um pop-up com um PDF ou uma NEGATIVA.

Pois bem, ao submeter um dos forms e apos alguns segundos eu submeter o outro, o primeiro procede normalmente, porem o segundo não acha o objeto.

Há um redirect no meio da logica conforme a necessidade (caso PDF , caso NEGATIVA).

Minha classe só tem a notação de @Resource.

Não posto o código pois é muito grande e de natureza sigilosa.

Se alguem souber uma forma de enviar este objeto atraves do form seria muito valia :).

Se alguem alguma falha minha na logica … ou em como estou usando o framework por favor me alerte!

Mas em todo casa se alguem puider me dar alguma ideia, sugestão … seria muito bem vinda.

obrigado a todos pela atenção e colaboração.

6 Respostas

Lucas_Cavalcanti

se vc usa banco de dados, vc pode passar só a chave primária do objeto, e carregá-lo do banco na lógica de imprimir…

não precisa adicionar o objeto na sessão… se vc usar o redirect, o vraptor vai replicar o objeto pra próxima requisição automaticamente

Vmaia

@Lucas Cavalcanti

Opa!!

Na verdade este objeto é uma resposta de um sistema externo (xml) e infelizmente não posso persisti-lo. :cry:

Pois bem, segui tua dica de que o vraptor replica os objetos para o próximo “logic” e tentei localiza-lo, porem não obtive sucesso, infelizmente.
Utilizei o …

e tentei localizar atraves do debug do eclipse, porem novamente não obtive sucesso.

Sintese…

O jsp1 submete para o Controller1 que faz uma solicitação a um sistema externo que devolve um XML e o transforma em OBJETO.
O Controller1 redireciona pelo Results.Logic() para o Contrller2.metodo1(Obejto) passando o objeto como parametro.
O Controller2 faz umas validações e encaminha o objeto para o this.metodos()… que o objeto deve passar ate chegar no this.metodoX(Objeto).
O this.metodoX(Objeto) realiza um redirect para Controller2.metodoFinalmente(x,y,z,Objeto).
O metodo Controller2.metodoFinalmente(x,y,z,Objeto) dispara o jsp2.
**O jsp2 recebe o Objeto atraves do … result.include("objetoKey", objeto); e é exibida algumas de suas propriedades na tela.
No jsp2 há 2 forms com apenas submite e cada um deles aponta para um metodo do Controller2.
***O metodo Controller2.submit1() atraves do result.included().get("objetokey"); não consegue achar o objeto e dispara um NullPointer.
***O metodo Controller2.submit2() atraves do result.included().get("objetokey"); não consegue achar o objeto e dispara um NullPointer.

**Caso eu utilize o httpSession.setAttribute("objetoKey", objeto);.
***O metodo Controller2.submit1() atraves do httpSession.getAttribute("objetoKey"); consegue achar o objeto e segue normalmente.
***O metodo Controller2.submit1() atraves do httpSession.getAttribute("objetoKey"); consegue achar o objeto e segue normalmente.
***Obs.: porem o caso de sucesso só acontece se eu submeter os dois forms um apos o outro em praticamente 2 segundos. Caso contrario só irá ter sucesso o primeiro submite.

Eu ainda não achei a solução, caso a sintese tenha dado um melhor entendimento e aberto novos horizontes, eu aceito qualquer sugestão, auxilio, qualquer coisa que eu possa compreender o que esta acontecendo.

Grato!

Lucas_Cavalcanti

se vc usar session, vc tem que ver se o usuário tá com cookies habilitados no site…

só tem como vc fazer isso com session mesmo, infelizmente…

tenta criar um bean session scoped:

@SessionScoped
@Component
public class MeuObjetoWrapper {
    private MeuObjeto objeto;
    //getter e setter
}

e receba um MeuObjetoWrapper no construtor das classes que vão dar get ou set no MeuObjeto… isso deve funcionar

Vmaia

@Lucas Cavalcanti

É isso ai Lucas também cheguei a essa conclusão.

Deixa eu aproveitar e perguntar … o

ele pega objetos do request ?

Vlw pela atenção e apoio!
:smiley:

Lucas_Cavalcanti

result.included() é pra uso interno do vraptor… ele só retorna o que foi incluido no result na requisição atual…

Vmaia

@Lucas Cavalcanti

Entendi …ok

Novamente muito obrigado pela atenção!
Abrçs.

Criado 8 de março de 2010
Ultima resposta 9 de mar. de 2010
Respostas 6
Participantes 2