Integração Spring e JSF

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!!!

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

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.

Integração JSF-Spring

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