Integração Spring e JSF

4 respostas
P

Olá pessoal.

Trabalho com Struts, Hibernate, EJBs etc. há algum tempo, mas sou ainda um estudante sobre Spring e JSF.

Para colocar em prática o pouco que estudei, resolvi criar um pequeno projeto utilizando Hibernate, Spring e JSF. No caso do JSF, optei por utilizar o ICEFaces.

Na aplicação criada, a primeira página é a de login (login.jspx). Nesta página há um componente ice:commandButton que submete um ice:form, invocando um Managed Bean (MB). Neste MB, é utilizado um objeto facade, cuja injeção de dependência é feita pelo Spring. Bom, até aqui tudo funciona em minha aplicação. Porém, após o usuário ser autenticado com sucesso, meu MB redireciona a aplicação para uma página chamada listaUsuarios.jspx, a qual listará usuários cadastros no sistema. Nesta página há um componente ice:dataTable, que tem como “value” uma ação de um outro Managed Bean, mas que também está configurado para receber um facade “injetado” pelo Spring. Mas, no redirecionamento da página login.jspx para a listaUsuarios.jspx, o Facade não é injetado pelo Spring no MB… No entanto, quando dentro da página listaUsuarios.jspx eu coloco um componente <ice:commandButton type=“submit” … /> com a mesma ação que está no componente ice:dataTable desta página, o Facade é injetado no MB…

Resumindo, parece que o Spring só injeta os Facades no meus Managed Beans quando os métodos nos MBs são invocados via <ice:commandButton type=“submit” … /> ou <ice:commandLink … />…

Alguém sabe me dizer porque? Sou ainda bastante leigo no Spring, mas pensei que ele injetasse as dependências sempre, de acordo com a configuração no applicationContext.xml, independente de efetuar, por exemplo, um Submit em um form.

Caso alguém possa me ajudar, fico agradecido.

Valeu!!!

4 Respostas

H

Olá,
também sou iniciante no Spring. Se eu entendi bem, na propriedade value do datatable, você informou uma ação, certo?

Dei uma olhada na documentação do icefaces, e esta propriedade deve ser usada prá informar o objeto (array etc) sobre o qual ocorrerá a iteração para a exibição dos dados. No caso de uma ação (e isso é conjectura minha), essa ação não retorna um objeto com os dados. Quando você executa essa ação, através de commandButton ou commandLink, aí sim o objeto é inserido no datatable.

Pode estar tudo errado, mas foi o que eu achei na documentação.
Dá uma olhada:
Documentação da tag
tutorial dataTable ICEFaces

P

Opa Hadilson. Beleza?

Tudo o que você disse está correto. Mas, no meu caso, o atributo “value” da tag ice:dataTable está assim: value=“usuariosList.usuarios”, onde “usuarios” é um atributo do Managed Bean usuariosList. No código está assim:
private UsuarioDados[] usuarios = buildListaUsuarios();

No método buildListaUsuarios(), eu preciso utilizar um objeto Facade, que teoricamente devia ser injetado pelo Spring no MB usuariosList. Só que ele fica “null”, quando a página onde está o ice:dataTable é “chamada” através da navegação configurada no faces-config.xml.

Ficou mais claro?

Valeu.

rodrigo_corinthians

Integração JSF-Spring

H

Ok, Paulo,

Desculpe a leseira…rs. Então, eu fiz um teste com um tutorial do icefaces, aquele do link na primeira resposta. O tutorial funcionou perfeitamente.

A única diferença que eu achei entre o tutorial e o que você explicou, foi a inicialização da variável, que no tutorial é feita diretamente (o que não altera em nada o comportamento, já que o método será chamado na ininialização/instanciação do bean). Ou seja, não é nada disso.

Vi também a sintaxe da informação, Mas também não acredito que seja isso.
De acordo com o tutorial deveria ser algo como:

<ice:dataTable 
            value="#{usuariosList.usuarios}"
            var="NOME_DA_VARIAVEL">

Então realmente não sei o que pode ser… Desculpe a ignorância no assunto, também estou começando, mas vou continuar procurando. Quem achar a resposta primeiro, posta aí…rsrs

Criado 28 de agosto de 2007
Ultima resposta 29 de ago. de 2007
Respostas 4
Participantes 3