Spring + JSF + Facelets Validator = DAO não instanciado  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 98
Localização: Florianópolis, Campos Novos - SC
Offline

Boa tarde, pessoal.
tudo bem?

Então, tentei de todas as formas fazer a validação de um formulário de uma página jsf e não obtive sucesso.

O problema é o seguinte:

Um objeto DAO que tenho na classe que implementa a Validator não é instanciada pelo Spring.

Essa classe chega a ser executada, mas quando chama o método dao.getByLogin(login); me retorna uma exceção de Nullpointer... dizendo que o dao não foi instanciado.

estou a 3 dias tentando resolver e não está facil hehe

O objetivo desta classe é garantir que não possa ser cadastrado dois usuários com o mesmo login.

Alguém tem alguma idéia de como resolver isto?


ps.: posto o código assim que sair do trabalho.


Desde já agradeço o apoio de todos.

[WWW] [MSN]
xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 98
Localização: Florianópolis, Campos Novos - SC
Offline

Alguém me ajuda

[WWW] [MSN]
gbvbahia01
Thread.start()
[Avatar]

Membro desde: 21/08/2008 22:24:13
Mensagens: 41
Offline

Amigo acabei de descobrir o mesmo roblema,

Você conseguiu resolver?

Aqui eu tive que bolar uma "marreta", estou com pressa e não tenho tempo de pesquisar muito:
Olha o que eu fiz:
Criei um construtor para o Validador:

E chamei o velho e bom ApplicationContext lá dentro, dai foi somente chamar meu DAO, deu certo.

Por favor, se você tiver achado uma forma mais "limpa" de resolver, posta ai...

Valeu

This message was edited 1 time. Last update was at 03/06/2010 17:23:34

SolloS
Thread.start()

Membro desde: 19/03/2007 16:06:20
Mensagens: 26
Offline

Bem, eu resolvi isso tornando o meu campo 'username' único e tratando a exceção

O bean DAO de vocês está sendo injetado corretamente pelo Spring? Postem seus applications e faces xml's para darmos uma olhada na situação.
xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 98
Localização: Florianópolis, Campos Novos - SC
Offline

Seguem os arquivos: ApplicationContext, Faces-config e o meu validator
Obrigado.
Abraços

ApplicationContext.xml


Faces-config.xml


Classe que implementa o validator



gbvbahia01 wrote:Amigo acabei de descobrir o mesmo roblema,

Você conseguiu resolver?

Aqui eu tive que bolar uma "marreta", estou com pressa e não tenho tempo de pesquisar muito:
Olha o que eu fiz:
Criei um construtor para o Validador:

E chamei o velho e bom ApplicationContext lá dentro, dai foi somente chamar meu DAO, deu certo.

Por favor, se você tiver achado uma forma mais "limpa" de resolver, posta ai...

Valeu

Caso eu não encontre outra solução acho que vou utilizar esta mesmo, amigo. Tenho 1 semana para terminar meu tcc não tá fácil! heuheu
Obrigado pela ajuda.
Abraços

This message was edited 1 time. Last update was at 04/06/2010 11:47:28


[WWW] [MSN]
SolloS
Thread.start()

Membro desde: 19/03/2007 16:06:20
Mensagens: 26
Offline

Declara seu validator lá no applicationContext também, o SpringbeanFacesELResolver chama do contexto do spring a injeção. Se não tiver o validator lá, ele não receberá as injeções. Dá uma testada aí e me diz se funcionou.
gbvbahia01
Thread.start()
[Avatar]

Membro desde: 21/08/2008 22:24:13
Mensagens: 41
Offline

gbvbahia01 wrote:Amigo acabei de descobrir o mesmo roblema,

Você conseguiu resolver?

Aqui eu tive que bolar uma "marreta", estou com pressa e não tenho tempo de pesquisar muito:
Olha o que eu fiz:
Criei um construtor para o Validador:

E chamei o velho e bom ApplicationContext lá dentro, dai foi somente chamar meu DAO, deu certo.

Por favor, se você tiver achado uma forma mais "limpa" de resolver, posta ai...

Valeu



Bom, deu certo em partes, tipo: o dao foi criado com sucesso, mas quando coloquei a aplicação no ar e comecei a testar, da problema... O Spring meio que não está conseguindo gerenciar o entitymanager e ele acaba fechando e/ou a aplicação da problema de falta de memória... Deste jeito, que eu falei, deu mo bode aqui

Com o EJB dá o mesmo problema, mas dá para resolver, com Spring não consegui achar solução, olha que já fui em vários posts...

This message was edited 5 times. Last update was at 04/06/2010 16:09:44

xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 98
Localização: Florianópolis, Campos Novos - SC
Offline

SolloS wrote:Declara seu validator lá no applicationContext também, o SpringbeanFacesELResolver chama do contexto do spring a injeção. Se não tiver o validator lá, ele não receberá as injeções. Dá uma testada aí e me diz se funcionou.


Declararia como um bean normal?
Tipo assim:


?

Obrigadoooo!!

[WWW] [MSN]
SolloS
Thread.start()

Membro desde: 19/03/2007 16:06:20
Mensagens: 26
Offline

Sim sim, dessa forma mesmo xxta.

Como procedeu aí?

[]'s
xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 98
Localização: Florianópolis, Campos Novos - SC
Offline

Não deu certo...

depois tentei retirar o trecho abaixo do faces-config.xml mas também não adiantou:



to achando que essa nao é a forma certa de utilizar o spring em um validator, acho que existe uma classe validator do spring...
vou dar uma procurada e caso apareçam mais dúvidas ou encontre a solução posto aqui!

Obrigado a todos!
abraços

[WWW] [MSN]
hopster
Thread.start()
[Avatar]

Membro desde: 04/08/2006 00:29:22
Mensagens: 46
Localização: Floripa / SC!
Offline

po cara... acho q vc nao ta certo

hehehehe

yeah!
[MSN]
xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 98
Localização: Florianópolis, Campos Novos - SC
Offline

hopster wrote:po cara... acho q vc nao ta certo

hehehehe


e como é o certo?


[WWW] [MSN]
gbvbahia01
Thread.start()
[Avatar]

Membro desde: 21/08/2008 22:24:13
Mensagens: 41
Offline

xxta wrote:Não deu certo...

depois tentei retirar o trecho abaixo do faces-config.xml mas também não adiantou:



to achando que essa nao é a forma certa de utilizar o spring em um validator, acho que existe uma classe validator do spring...
vou dar uma procurada e caso apareçam mais dúvidas ou encontre a solução posto aqui!

Obrigado a todos!
abraços


Não tem como fazer IOC nos validadores e conversores do JSF(1.2), não dá!
Pesquisei muito e até na documentação existe essa informação, por isso temos que esquecer esta forma... mas tem uma segunda opção:
O que pode ser feito neste caso é utilizar um validator dentro do bean, na tag JSF em vez de utilizar o

utilize a chamada

O método utilizado no bean deve ser idêntico ao método que é utilizado na classe validador.
Sem retorno, recebendo os mesmos parâmetros e se houver erros lançar a ValidatorException da mesma forma.
O acredito que o mesmo pode ser feito com converter, já que um converter também pode ser indicado na tag da mesma forma que o validator.
OBS:
1. Não há necessidade de implementar a interface validador no bean.
2. Não há necessidade de por o bean como validator no faces-config.xml, somente a declaração normal do bean.

This message was edited 1 time. Last update was at 17/06/2010 13:52:31

xxta
JavaBaby

Membro desde: 07/04/2008 13:09:17
Mensagens: 98
Localização: Florianópolis, Campos Novos - SC
Offline

gbvbahia01 wrote:
xxta wrote:Não deu certo...

depois tentei retirar o trecho abaixo do faces-config.xml mas também não adiantou:



to achando que essa nao é a forma certa de utilizar o spring em um validator, acho que existe uma classe validator do spring...
vou dar uma procurada e caso apareçam mais dúvidas ou encontre a solução posto aqui!

Obrigado a todos!
abraços


Não tem como fazer IOC nos validadores e conversores do JSF(1.2), não dá!
Pesquisei muito e até na documentação existe essa informação, por isso temos que esquecer esta forma... mas tem uma segunda opção:
O que pode ser feito neste caso é utilizar um validator dentro do bean, na tag JSF em vez de utilizar o

utilize a chamada

O método utilizado no bean deve ser idêntico ao método que é utilizado na classe validador.
Sem retorno, recebendo os mesmos parâmetros e se houver erros lançar a ValidatorException da mesma forma.
O acredito que o mesmo pode ser feito com converter, já que um converter também pode ser indicado na tag da mesma forma que o validator.
OBS:
1. Não há necessidade de implementar a interface validador no bean.
2. Não há necessidade de por o bean como validator no faces-config.xml, somente a declaração normal do bean.


Obrigado, gbvbahia01.
Vou testar qdo chegar em casa!!
No momento estou utilizando da forma acima, usando o validator normal e verificando no método validate se o dao for nulo busco a informação no XML, pois se deixasse no construtor estourava a memória pq ele era instanciado toda vez que era solicitada uma validação:



Apresento amanhã o TCC e como está funcionando não sei se vou alterar no projeto em si, mas vou testar.
Após a apresentação faço as devidas correções e posto o resultado

Muito obrigado!
abraços

[WWW] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team