Aew galera estou tentando desenvolver uma aplicacao com Spring 3 + JSF 2 mas nao estou conseguindo fazer a DI funcionar segue as classes dao, service e controller
@ManagedBean(name="empresaController")@ViewScopedpublicclassEmpresaController{privateEmpresaempresa=newEmpresa();privateList<Empresa>empresaList=newArrayList<Empresa>();@ManagedProperty("#{empresaService}")privateEmpresaServiceempresaService;publicEmpresaController(){atualizarTela();}/** * Limpa os campos input e atualiza a lista de usuarios cadastrados */privatevoidatualizarTela(){empresa=newEmpresa();empresaList=empresaService.findAll();}/** * Grava novo registro ou atualiza um registro */publicvoidgravar(){empresaService.grava(getEmpresa());atualizarTela();}publicvoidexcluir(){// service.excluir(getEmpresa());atualizarTela();}publicList<Empresa>getListaEmpresa(){returnempresaList;}publicvoidsetListaEmpresa(List<Empresa>empresaList){this.empresaList=empresaList;}publicEmpresagetEmpresa(){returnempresa;}publicvoidsetEmpresa(Empresaempresa){this.empresa=empresa;}}
javax.servlet.ServletException: Não foi possível criar o bean gerenciado empresaController. Os seguintes problemas foram encontrados:
- A propriedade empresaService para o bean gerenciado empresaController não existe.
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:745)
org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:716)
org.apache.jsp.index_jsp._jspService(index_jsp.java:58)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
Ja tentei de varias formas mas nada de funcionar com Spring 3 alguem poderia me ajudar ou dar sugestoes de uma melhor implementação?
Estou usando a mesma configuração que vc (Spring 3 + JSF2 sem o Spring MVC ou o spring WebFlow) e estou passando pelo mesmo problema.
Consegui fazer “funcionar” utilizando a annotation @Component ao invéz das especializações @Repository, @Service e @Controller mas eu ainda não tenho certeza de que isso não vai causar problemas maiores no futuro - fora o fato de ainda não ter entendido exatamento o quê está acontecendo …
Outra annotation que tive de susbtituir é a @ManagedBean do JSF, usei a @Component do spring e funcionou, a referência #{beanName} foi resolvida sem problemas dentro da página xhtml.
Eu ainda tentei usar a tradução de exceção do spring mas sem a annotation @Repository não funcionou - óbviamente visto que o spring não faz idéia de onde é que ele terá de criar o proxy maldito pra interceptar as exceções …
Alguma idéia? Qualquer ajuda será bem vinda …
N
nosbor84
Estou prestes a desistir de tudo e partir pra outro framework. Estou com esse mesmo problema faz um tempão e não consigo sair do canto. O meu está bem simples, tenho um @ManagedBean e quero injetar um Service, anotado com @Component, mas dá o mesmo erro. Desisto.
colocando o set para o service o Spring injeta por EL, agora estou achando estranho no primefaces quando tento usar o sortBy ou FilterBy no Datatable e dispara inumeros selects todos iguais, e nao funciona, seria algum problema referente a configuracao de transações do Spring com JSF2
Segue a pagina xhtml
<p:dataTablevar="nfe"value="#{nFeController.nfeList}"emptyMessage="Nenhuma nota encontrada!"paginator="true"rows="10"><p:columnfilterBy="#{nfe.status}"headerText="Status"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.status}"/></p:column><p:columnfilterBy="#{nfe.NDoc}"headerText="N.Doc"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.NDoc}"/></p:column><p:columnfilterBy="#{nfe.dataEmissao}"headerText="Data Emissão"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.dataEmissao}"/></p:column><p:columnfilterBy="#{nfe.tipoNF}"headerText="E/S"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.tipoNF}"/></p:column><p:columnfilterBy="#{nfe.valor}"headerText="Valor Documento"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.valor}"/></p:column><p:columnfilterBy="#{nfe.destinatario}"headerText="Destinatário"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.destinatario}"/></p:column><p:columnfilterBy="#{nfe.uf}"headerText="UF"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.uf}"/></p:column><p:columnfilterBy="#{nfe.dataAprovacao}"headerText="Data Aprovação"filterMatchMode="startsWith"><h:outputTextvalue="#{nfe.dataAprovacao}"/></p:column></p:dataTable>
O Spring trabalha sim com ViewScoped, mas desde que não seja feito o que você indicou, que é substituir o @ManagedProperty por @Autowired. Fazendo as configurações adequadas, o Spring faz uso da forma que o JSF trabalha, sem grandes interferências. Usando @Autowired não funciona mesmo.
Olhe no link que postei acima, que há mais explicações sobre isso.
Flw! :thumbup:
furacao123
von.juliano fiz exatamente da maneira que consta no link que vc me mandou…
mas o problema agora esta no sortBy e FilterBy do dataTable do primefaces, quando tento usalo fica correndo um loop de select na aplicação e nao ordena nada nem filtra o que pode ser?
Segue o primeiro nullPointer e depois a cadeia de selects repitidos
28/09/2011 09:58:56 com.sun.faces.context.PartialViewContextImpl processPartial
INFO: java.lang.NullPointerException
java.lang.NullPointerException
at org.primefaces.component.datatable.DataHelper.decodeFilterRequest(DataHelper.java:152)
at org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:57)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
at org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:594)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIData.visitTree(UIData.java:1411)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIForm.visitTree(UIForm.java:344)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
at java.lang.Thread.run(Thread.java:619)
furacao123
Percebi o seguinte quando eu uso o ManagedProperty eu nao consigo chamar o service no construtor, pois este ainda nao é injetado e vai nulo, eu estava passando para o get da minha lista mas a aplicação chama varias vezes o getNFeList isso faz com que seja disparado varios selects e assim nao funciona o sortBy nem FilterBy, o que fazer para fazer funcionar esse Spring com JSF2
von.juliano
Se eu entendi o que você quis dizer, acho que é o seguinte:
Pensei nisso tambem mas fiz de outra maneira, utilizando o @PostConstruct
@PostConstruct
public void init() {
setNfeList(nFeService.getByEmpresa(1));
}
funcionou agora o sortBy mas mesmo assim fica disparando selects cada vez que clico no header da coluna para fazer o sortBy isso eh normal?
e quando tento utilizar o filterBy retorna a seguinte exception
28/09/2011 17:51:52 com.sun.faces.context.PartialViewContextImpl processPartial
INFO: java.lang.NullPointerException
java.lang.NullPointerException
at org.primefaces.component.datatable.DataHelper.decodeFilterRequest(DataHelper.java:152)
at org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:57)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
at org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:594)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIData.visitTree(UIData.java:1411)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIForm.visitTree(UIForm.java:344)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1600)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
at java.lang.Thread.run(Thread.java:619)
WRYEL
@von.juliano: esse modelo que você disse funcionar spring/jsf 2/viewScoped é o Spring controlando os ManagedBeans? se sim, não sabia, vou testar então
von.juliano
Na verdade o Spring não cria os Managed Beans, ele deixa essa parte para o próprio JSF e faz uso do seu funcionamento para que os beans sejam injetados sem interferir no fluxo. Se o Spring não interfere, não afeta a forma que o JSF trabalha, então você não perde o uso de nenhum de seus recursos!
Blz? Flw! :thumbup:
furacao123
e referente ao filterby o que pode ser ?
como voce disse @von.juliano trabalhando dessa forma o JSF2 funciona independente entao esse exception esta diretamente ligado apenas ao JSF?
o Spring fica entao responsavel apenas pela parte de modelo da aplicação?
Sobre os selects, verifique se o método init() anotado com @PostConstructor não está sendo chamado várias vezes. O que costumo fazer, é ter um método listar() que faz a busca e joga os valores na collection, e um getXXX() que retorna a lista, assim o listar é chamado pela ação da página, e para o que o jsf precisar, ele chama o get que pega os valores já carregados.
Quanto ao filterby não sei como te ajudar, conheço pouco do primefaces. :?
pois se eu nao fizer dessa forma eu nao tenho o service injetado pelo Spring
furacao123
Estou tentando fazer uma navegação num sistema por meio do ajax, mas quando dou update em um componente para mostrar os dados de uma dataTable o mesmo vem vazio, é como se nao disparace o metodo set no controller, o que pode ser?
com o @ViewScoped vai funcionar corretamente?
thimor
Estou com o mesmo problema de voces. Fiz varios testes. Passei pelos mesmos problemas. No caso de usar o @Component o ManegedBean passa a ser um Bean Sigleton do Spring e tudo que voce faz numa sessão passa a refletir nas outras sessões do servidor. Eu vou ser obrigado a usar a anotacao de escopo do Spring. Consegui usar sem problemas assim:
O problema disso é que eu nao consigo trabalhar com o escopo de request. So com o de Sessão. O escopo de request ate funciona eu entro nas telas navego nas tabelas. So que quando tento enviar qualquer coisa novamente para o servidor… os parametros estao todos nulos.
Fiz duas implementacaoes de escopo personalizado que entrei na web, para deixar o Spring com ViewScoped http://cagataycivici.wordpress.com/2010/02/17/port-jsf-2-0s-viewscope-to-spring-3-0/ e http://www.esseconhece.com.br/programacao/java/disponibilizando-viewscope-para-spring/
Em ambos os casos funcionou, pelo log do tomcat ele executa todas as funcoes. So que na tela o que e solicitei nao aparece, como por exemplo o dataModel com o resultado da pesquisa.
Eu pensei em fazer de outra forma, mas nao consegui. Gostaria de saber se alguem responder se dessa forma funciona.
Como eu tenho varias camadas eu queria deixar o spring so ate a camada de servico. No ManegedBean eu nao usaria nada de Spring, apenas JSF 2. Do Service para baixo eu usaria o Spring. So que quando eu fiz isso passou a dar os mesmos erros que os colegas relataram. Todo acesso retorna nullpointerexception. Por algum motivo o Spring nao injeta os objetos se nao existir suas anotacoes nos managed Bean. Mesmo eu mudando o context:component-scan e retirando os listeners de JSF dos arquivos de configuracao.
Alguem tem alguam ideia?
A arquitetura que estou tentando usar agora diante desses problemas eh:
Pagina JSF 2–> ManagedBean – > Service —(Regras de negocio) E desse ponto em diante usando o Spring 3.0.6 -->
–> Daos (JPA2 myEclipse 2.0 ) --> Modelo e banco de dados (MySQL)