整合jsf,spring,hibernate。如何将Spring bean注入到JSF托管的bean中? [英] Integration jsf, spring, hibernate. How to inject Spring beans into JSF managed beans?

查看:101
本文介绍了整合jsf,spring,hibernate。如何将Spring bean注入到JSF托管的bean中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用框架JSF 2.1,Spring 3.1.1.Release,hibernate 3.2.1开发Java EE项目。现在我正处于整合他们三个的阶段。
构建成功,我使用tomcat服务器7,但是我在头版获得这个异常。

  Etat HTTP 500  -  

类型Rapport''异常

消息

说明服务于一个完全不同的人, larequête。

异常

javax.servlet.ServletException
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
导致mère

显示java.lang.NullPointerException
controller.AnneeBean.getListeAnnees(AnneeBean.java:15)
sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
sun.reflect。 NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
com.sun.faces.el。 (DemuxCompositeELResolver.java:203)
org.apache.el.parser.AstValue.getValue(AstValue.java:183)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:
com.sun.faces.face let Component.TagValueExpression.getValue(TagValueExpression.java:109)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper。 java:182)
javax.faces.component.UIData.getValue(UIData.java:731)
javax.faces.component.UIData.getDataModel(UIData.java:1798)
javax。 faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
javax.faces.component.UIData.setRowIndex(UIData.java:473)
com.sun.faces.renderkit.html_basic.TableRenderer。 encodeBegin(TableRenderer.java:81)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
javax.faces.component.UIData.encodeBegin(UIData.java:1118)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
javax.faces.component.UIComponent。 encodeAll(UIComponent.java: 1759)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com。 sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
note La tracecomplètede la causemèrede cette erreur est disponible dans les fichiers journaux de Apache Tomcat / 7.0.42。



hibernate
hibernate.cfg.xml

 <?xml version =1.0encoding =UTF-8?> 
<!DOCTYPE hibernate-configuration PUBLIC - // Hibernate / Hibernate Configuration DTD 3.0 // ENhttp://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">
< hibernate-configuration>
< session-factory>
< property name =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / property>
< property name =hibernate.connection.driver_class> com.mysql.jdbc.Driver< / property>
< property name =hibernate.connection.url> jdbc:mysql:// localhost:3306 / base?zeroDateTimeBehavior = convertToNull< / property>
< property name =hibernate.connection.username>根< / property>
< mapping resource =net / vo / Annee.hbm.xml/>
< / session-factory>
< / hibernate-configuration>

hibernate.reveng.xml

 <?xml version =1.0encoding =UTF-8?> 
<!DOCTYPE hibernate-reverse-engineering PUBLIC - // Hibernate / Hibernate反向工程DTD 3.0 // ENhttp://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd >
< hibernate-reverse-engineering>
< schema-selection match-catalog =base/>
< table-filter match-name =annee/>
< / hibernate-reverse-engineering>

AnneeDao.java

  package dao; 

import java.util.List;
导入net.vo.Annee;

public interface AnneeDao {
public List getAllAnnees();
public Annee getAnnee(Integer id);
public void insert(Annee annee);
public void update(Annee annee);
public void delete(Integer id);

AnneeHibernateDao.java

  package dao; 

import java.util.List;
导入net.vo.Annee;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class AnneeHibernateDao implements AnneeDao {
private List< Annee> listeAnnees;
私人Annee annee;
public void init()
{
System.out.println(Méthoded'initiation);
}
@Override
public List getAllAnnees(){
Session session = HibernateUtil.getSession();
尝试
{
session.beginTransaction();
listeAnnees = session.createQuery(from Annee)。list();
返回listeAnnees;
}
catch(HibernateException e)
{
throw e;
}
finally
{
session.close();


$ b @Override
public Annee getAnnee(Integer id){
Session session = HibernateUtil.getSession();
尝试
{
session.beginTransaction();
Query q = session.createQuery(来自Annee,作为where a.annee =+ id);
return(Annee)q.uniqueResult();
}
finally
{
session.close();



@Override
public void insert(Annee annee){

Session session = HibernateUtil.getSession();
Transaction tx = null;
尝试
{
tx = session.beginTransaction();
session.save(annee);
tx.commit();

catch(RuntimeException e)
{
if(tx!= null)
{
tx.rollback();
}
throw e;
}
finally
{
session.close();
}
}

@Override
public void update(Annee annee){
Session session = HibernateUtil.getSession();
Transaction tx = null;
尝试
{
tx = session.beginTransaction();
session.update(annee);
tx.commit();

catch(RuntimeException e)
{
if(tx!= null)
{
tx.rollback();
}
throw e;
}
finally
{
session.close();



@Override
public void delete(Integer id){
Session session = HibernateUtil.getSession();
Transaction tx = null;
尝试
{
tx = session.beginTransaction();
annee =(Annee)session.get(Annee.class,id);
session.delete(annee);
tx.commit();

catch(RuntimeException e)
{
if(tx!= null)
{
tx.rollback();
}
throw e;
}
finally
{
session.close();
}
}


}

HibernateUtil.java

  package dao; 

import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

/ **
* Hibernate Utility类有一个方便的方法来获得Session Factory
*对象。
*
* @author images
* /
public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {
try {
//从标准(hibernate.cfg.xml)
// config文件创建SessionFactory。
sessionFactory = new AnnotationConfiguration()。configure()。buildSessionFactory();
} catch(Throwable ex){
//记录异常。
System.err.println(Initial SessionFactory creation failed。+ ex);
抛出新的ExceptionInInitializerError(ex);



public static Session getSession(){
return sessionFactory.openSession();


$ / code $ / pre
$ b $ Pojo文件

Annee.java

  package net.vo; 

public class Annee实现java.io.Serializable {


private int annee;

public Annee(){
}

public Annee(int annee){
this.annee = annee;
}

public int getAnnee(){
return this.annee;
}

public void setAnnee(int annee){
this.annee = annee;
}




}

映射文件:Annee.hbm.xml

 <?xml version =1.0?> 
<!DOCTYPE hibernate-mapping PUBLIC - // Hibernate / Hibernate映射DTD 3.0 // EN
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\"> ;
<! - 由Hibernate Tools生成的13 mai 2014 18:23:22 3.2.1.GA - >
< hibernate-mapping>
< class name =net.vo.Anneetable =anneecatalog =base>
< id name =anneetype =int>
< column name =annee/>
< generator class =assigned/>
< / id>
< / class>
< / hibernate-mapping>

Spring
AnneeMetier.java

  package model.services; 

import java.util.List;

public interface AnneeMetier {
public List getAllAnnees();
}

AnneeMetierImpl.java

  package model.services; 

进口dao.AnneeDao;
import java.util.List;
导入net.vo.Annee;

公共类AnneeMetierImpl实现AnneeMetier {

私有AnneeDao anneeDao;

@Override
public List getAllAnnees(){
return anneeDao.getAllAnnees();
}

public void setAnneeDao(AnneeDao anneeDao){
this.anneeDao = anneeDao;
}

public AnneeDao getAnneeDao(){
return anneeDao;





JSF AnneeBean.java

 程序包控制器; 

import java.util.List;
import model.services.AnneeMetier;
导入net.vo.Annee;

公开课AnneeBean {

私人AnneeMetier anneeMetier;

私人列表< Annee> listeAnnees;

public List getListeAnnees(){
listeAnnees = anneeMetier.getAllAnnees();
返回listeAnnees;
}

public void setListeAnnees(List listeAnenees){
this.listeAnnees = listeAnenees;
}

public AnneeMetier getAnneeMetier(){
return anneeMetier;
}

public void setAnneeMetier(AnneeMetier anneeMetier){
this.anneeMetier = anneeMetier;
}

}

web.xml

 <?xml version =1.0encoding =UTF-8?> 
< web-app version =3.0xmlns =http://java.sun.com/xml/ns/javaeexmlns:xsi =http://www.w3.org/2001/ XMLSchema-instancexsi:schemaLocation =http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd\">
< listener>
< listener-class>
org.springframework.web.context.ContextLoaderListener
< / listener-class>
< / listener>
< listener>
< listener-class>
org.springframework.web.context.request.RequestContextListener
< / listener-class>
< / listener>
< context-param>
< param-name> javax.faces.PROJECT_STAGE< / param-name>
< param-value> WEB-INF / applicationContext.xml< / param-value>
< / context-param>
< servlet>
< servlet-name> Faces Servlet< / servlet-name>
< servlet-class> javax.faces.webapp.FacesServlet< / servlet-class>
1< / load-on-startup>
< / servlet>
< servlet-mapping>
< servlet-name> Faces Servlet< / servlet-name>
< url-pattern> / faces / *< / url-pattern>
< / servlet-mapping>
< session-config>
< session-timeout>
30
< / session-timeout>
< / session-config>
< welcome-file-list>
< welcome-file> faces / index.xhtml< / welcome-file>
< / welcome-file-list>
< / web-app>

applicationContext.xml

 <?xml version =1.0encoding =UTF-8?> 
< beans xmlns =http://www.springframework.org/schema/beans
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xmlns:aop =http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
xmlns:context =http://www.springframework.org/schema /context/spring-context-3.1.xsd
xmlns:tx =http://www.springframework.org/schema/tx/spring-tx-3.1.xsd

xsi:schemaLocation =http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework .org / schema / aop / spring-aop-3.1.xsd http://www.springframework.org/schema/aop/spring-aop-3.1.xsd/spring-spring-aop-3.1.xsd-3.1.1。 RELEASE.xsd
http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/context/spring-context-3.1.xsd/ spring-spring-context-2.5.xsd-3.1.1.RELEASE.xsd
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/tx/spring-tx-3.1.xsd/spring-spring-tx-3.1.xsd-3.1.1.RELEASE.xsd
>
< bean id =anneeDaoclass =dao.AnneeHibernateDao>< / bean>
< bean id =anneeMetierclass =model.services.AnneeMetierImpl>
< property name =anneeDaoref =anneeDao/>
< / bean>

< / beans>

faces-config.xml

 <?xml version ='1.0'encoding ='UTF-8'?> 

<! - - ===========完整配置文件======================= =========== - >

xmlns =http://java.sun.com/xml/ns/javaee
xmlns:xsi = http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation =http://java.sun.com/xml/ns/javaee http://java.sun.com/ XML / NS / JavaEE的/网络facesconfig_2_1.xsd>

< application>
< variable-resolver>
org.springframework.web.jsf.DelegatingVariableResolver
< / variable-resolver>
< / application>
< managed-bean>
< managed-bean-name> anneeBean< / managed-bean-name>
< managed-bean-class> controller.AnneeBean< / managed-bean-class>
< managed-bean-scope>请求< / managed-bean-scope>
< / managed-bean>
< / faces-config>

index.xhtml

 <?xml version ='1.0'encoding ='UTF-8'?> 
<!DOCTYPE html PUBLIC - // W3C // DTD XHTML 1.0 Transitional // ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
xmlns:h =http://java.sun.com/jsf/html
xmlns:p =http://primefaces.org/ui>
< h:头>
< title> Facelet标题< / title>
< / h:头>
< h:body>
< h:dataTable var =anneesvalue =#{anneeBean.listeAnnees}>
< p:列headerText =Annee>
< h:outputText value =#{annee.annees}/>
< / p:栏>
< / h:dataTable>
< / h:body>
< / html>

请你帮我一下,我会很感激的

edit:
这是堆栈跟踪更新

  mai 14 ,2014 1:14:41 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE:servlet [Faces Servlet]与上下文中的路径[/ testJSF_Spring_Hibernate]引发异常[Erreur lors de linjection (根据原因)
java.lang.NullPointerException
at model.services.AnneeMetierImpl.getAllAnnees(AnneeMetierImpl.java:17)
at controller.AnneeBean.init( AnneeBean.java:25)在sun.reflect.NativeMethodAccessorImpl.invoke0
(本机方法)
处sun.reflect sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
。 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.face s.vendor.WebContainerInjectionProvider.invokeAnnotatedMethod(WebContainerInjectionProvider.java:117)
at com.sun.faces.vendor.WebContainerInjectionProvider.invokePostConstruct(WebContainerInjectionProvider.java:99)
at com.sun.faces.mgbean。 BeanBuilder.invokePostConstruct(BeanBuilder.java:223)
at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:105)
at com.sun.faces.mgbean.BeanManager.createAndPush( BeanManager.java:409)
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java: 244)
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at com.sun.faces.el.ChainAwareVariableResolver.resolveVariable(ChainA (可变值解析器) 108)
at com.sun.faces.el.VariableResolverChainWrapper.getValue(VariableResolverChainWrapper.java:115)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)
at org .apache.el.parser.AstValue.getValue(AstValue.java:161)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at com.sun.faces.facelets .el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
在javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
在javax.faces.component.UIData.getValue(UIData.java:731)
在javax.faces.component.UIData .getDataModel(UIData.java:1798)
at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
at javax.faces.component.UIData.setRowIndex(UIData.java:473 )美元,com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81 b $ b)
在javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
在javax.faces.component.UIData.encodeBegin(UIData.java:1118)
在javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
在javax.faces.component。 UIComponent.encodeAll(UIComponent.java:1759)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView( FaceletViewHandlingStrategy.java:401)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax .faces.webapp.FacesServlet.service(FacesServlet.java:410)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
在org.apache.catalina.core .ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.jav a:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache .tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1852)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
位于java.util.concurrent .ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:603)$ b $ at java.lang.Thread.run(Thread.java:722)

edit 2:
这是AnneeBean Class

 程序包控制器; 

import java.util.List;
import javax.annotation.PostConstruct;
import model.services.AnneeMetier;
import model.services.AnneeMetierImpl;
导入net.vo.Annee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
@Scope(view)
public class AnneeBean {

@Autowired
私人AnneeMetier anneeMetier;

私人列表< Annee> listeAnnees;

@PostConstruct
public void init(){
anneeMetier = new AnneeMetierImpl();
listeAnnees = anneeMetier.getAllAnnees();

public List getListeAnnees(){
listeAnnees = anneeMetier.getAllAnnees();
返回listeAnnees;
}

public void setListeAnnees(List listeAnenees){
this.listeAnnees = listeAnenees;
}

public AnneeMetier getAnneeMetier(){
return anneeMetier;
}

public void setAnneeMetier(AnneeMetier anneeMetier){
this.anneeMetier = anneeMetier;
}

}

编辑3:
index.xhtml

 <?xml version ='1.0'encoding ='UTF-8' ?> 
<!DOCTYPE html PUBLIC - // W3C // DTD XHTML 1.0 Transitional // ENhttp://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
xmlns:h =http://java.sun.com/jsf/html
xmlns:p =http://primefaces.org/ui
xmlns:f =http://java.sun.com/jsf/core>
< h:头>
< title> Facelet标题< / title>
< / h:头>
< h:body>
< h:form>
< p:dataTable var =listeAnneesvalue =#{anneeBean.listeAnnees}>
< p:列headerText =Annee>
< h:outputText value =#{listeAnnees.annee}/>
< / p:栏>
< / p:dataTable>
< / h:表格>
< / h:body>
< / html>


解决方案

非JSF开发者的天真解决方案是只需初始化getter中的变量即可解决属性中的 null 值。这是:

  public List getListeAnnees(){
listeAnnees = getAnneeMetier()。getAllAnnees();
返回listeAnnees;
}

public AnneeMetier getAnneeMetier(){
if(anneeMetier == null){
anneeMetier = new AnneeMetierImpl();
}
return anneeMetier;
}

但是,如果 AnneeMetier#getAllAnnees()从数据库中检索数据。这在这里解释:为什么JSF多次调用getters



为了解决这个问题,你需要做两件事:


  1. 定义bean的正确范围。

  2. 使用 @PostConstruct 注释方法为工作初始化必要的数据。 / li>

这会导致:


  1. 将范围定义为 @ViewScoped (在上面的链接中解释过)

  2. 初始化 listeAnenees @PostConstruct 方法。
  3. 从getters / setters中删除任何业务逻辑
  4. ol>

    所以代码如下所示:

      @ManagedBean 
    @ViewScoped
    public class AnneeBean {
    private AnneeMetier anneeMetier;
    私人列表< Annee> listeAnnees;

    @PostConstruct
    public void init(){
    anneeMetier = new AnneeMetierImpl();
    listeAnnees = anneeMetier.getAllAnnees();
    }

    public List getListeAnnees(){
    return listeAnnees;
    }

    public void setListeAnnees(List listeAnenees){
    this.listeAnnees = listeAnenees;
    }

    public AnneeMetier getAnneeMetier(){
    return anneeMetier;
    }

    public void setAnneeMetier(AnneeMetier anneeMetier){
    this.anneeMetier = anneeMetier;


    重新尝试将JSF与Spring集成,您必须考虑到 Spring尚未完全支持JSF 2 @ViewScoped 注释。对于这种情况,您需要自己实施。网上有很多关于这方面的例子,看起来最受欢迎的是来自 Cagatay的。这样,你就可以从双方获得权力。您的bean看起来像这样:

      @Component 
    @Scope(view)
    public AnneeBean类{
    @Autowired
    私人AnneeMetier anneeMetier;
    私人列表< Annee> listeAnnees;

    @PostConstruct
    public void init(){
    listeAnnees = anneeMetier.getAllAnnees();
    }

    public List getListeAnnees(){
    return listeAnnees;
    }

    public void setListeAnnees(List listeAnenees){
    this.listeAnnees = listeAnenees;


    $ / code $ / pre

    更多信息



    • Bean属性在不同的会话中共享




    • 由于您正在学习Spring,所以最好的办法是启用组件扫描并使用注释来配置你的春豆。执行以下操作:


      • 删除applicationContext.xml中的任何bean配置。

      • 添加这个配置可以启用bean扫描注释:

         <! -  
        这些将会使用批注配置
        启用组件扫描,而不是使用XML配置。每包一个
        - >
        < context:component-scan base-package =dao/>
        < context:component-scan base-package =model.services/>

        或者如果所有的类都在一个根包中。

         <! -  
        假设您的软件包有一个根包,例如
        < context:component-scan base-package =com .myproject.dao/>
        < context:component-scan base-package =com.myproject.model.services/>
        - >
        < context:component-scan base-package =com.myproject/>


      • 开始配置您的Spring托管bean:

          @Repository 
        public class AnneeHibernateDao implements AnneeDao {
        // ...
        }

        @服务
        public class AnneeMetierImpl实现AnneeMetier {
        @Autowired
        私有AnneeDao anneeDao;
        // ...
        }




      编译您的项目并运行它。


      I'm working on a Java EE project using frameworks JSF 2.1, Spring 3.1.1.Release, hibernate 3.2.1. now i'm in the phase of integrating the three of them. the build succeeded, i use tomcat server 7. but i get this exception on the the front page.

      Etat HTTP 500 -
      
      type Rapport d''exception
      
      message
      
      description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.
      
      exception
      
      javax.servlet.ServletException
          javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)
      cause mère
      
      java.lang.NullPointerException
          controller.AnneeBean.getListeAnnees(AnneeBean.java:15)
          sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          java.lang.reflect.Method.invoke(Method.java:601)
          javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
          com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
          com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
          org.apache.el.parser.AstValue.getValue(AstValue.java:183)
          org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
          com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
          javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
          javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
          javax.faces.component.UIData.getValue(UIData.java:731)
          javax.faces.component.UIData.getDataModel(UIData.java:1798)
          javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
          javax.faces.component.UIData.setRowIndex(UIData.java:473)
          com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
          javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
          javax.faces.component.UIData.encodeBegin(UIData.java:1118)
          javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
          javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
          javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
          com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
          com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
          com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
          com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
          com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
          javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
      note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/7.0.42.
      

      Hibernate hibernate.cfg.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
      <hibernate-configuration>
        <session-factory>
          <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
          <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/base?zeroDateTimeBehavior=convertToNull</property>
          <property name="hibernate.connection.username">root</property>
          <mapping resource="net/vo/Annee.hbm.xml"/>
        </session-factory>
      </hibernate-configuration>
      

      hibernate.reveng.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
      <hibernate-reverse-engineering>
        <schema-selection match-catalog="base"/>
        <table-filter match-name="annee"/>
      </hibernate-reverse-engineering>
      

      AnneeDao.java

      package dao;
      
      import java.util.List;
      import net.vo.Annee;
      
      public interface AnneeDao {
          public List getAllAnnees();
          public Annee getAnnee(Integer id);
          public void insert(Annee annee);
          public void update(Annee annee);
          public void delete(Integer id);
      }
      

      AnneeHibernateDao.java

      package dao;
      
      import java.util.List;
      import net.vo.Annee;
      import org.hibernate.HibernateException;
      import org.hibernate.Query;
      import org.hibernate.Session;
      import org.hibernate.Transaction;
      
      public class AnneeHibernateDao implements AnneeDao{
          private List<Annee> listeAnnees;
          private Annee annee;
          public void init()
          {
              System.out.println("Méthode d'initiation");
          }
          @Override
          public List getAllAnnees() {
              Session session=HibernateUtil.getSession();
              try
              {
                  session.beginTransaction();
                  listeAnnees = session.createQuery("from Annee").list();
                  return listeAnnees;
              }
              catch(HibernateException e)
              {
                  throw e;
              }
              finally
              {
                  session.close();
              }
          }
      
          @Override
          public Annee getAnnee(Integer id) {
             Session session = HibernateUtil.getSession();
             try
             {
                 session.beginTransaction();
                 Query q = session.createQuery("from Annee as a where a.annee=" + id);
                 return (Annee) q.uniqueResult();
             }
             finally
             {
                 session.close();
             }
          }
      
          @Override
          public void insert(Annee annee) {
      
            Session session = HibernateUtil.getSession();
            Transaction tx=null;
            try
            {
                tx = session.beginTransaction();
                session.save(annee);
                tx.commit();         
            }
            catch(RuntimeException e)
            {
                if(tx != null) 
                  {
                      tx.rollback();
                  }
                throw e;
            }
            finally
            {
                session.close();
            }
          }
      
          @Override
          public void update(Annee annee) {
              Session session = HibernateUtil.getSession();
              Transaction tx=null;
              try
              {
                  tx=session.beginTransaction();
                  session.update(annee);
                  tx.commit();
              }
               catch(RuntimeException e)
               {
                 if(tx != null) 
                  {
                      tx.rollback();
                  }
                  throw e;
               }
               finally
               {
                  session.close();
               }
          }
      
          @Override
          public void delete(Integer id) {
             Session session = HibernateUtil.getSession();
             Transaction tx = null;
             try
             {
                 tx=session.beginTransaction();
                 annee = (Annee) session.get(Annee.class,id);
                 session.delete(annee);
                 tx.commit();
             }
             catch(RuntimeException e)
               {
                  if(tx != null) 
                  {
                      tx.rollback();
                  }
                  throw e;
               }
               finally
               {
                  session.close();
               }
          }
      
      
      }
      

      HibernateUtil.java

      package dao;
      
      import org.hibernate.Session;
      import org.hibernate.cfg.AnnotationConfiguration;
      import org.hibernate.SessionFactory;
      
      /**
       * Hibernate Utility class with a convenient method to get Session Factory
       * object.
       *
       * @author images
       */
      public class HibernateUtil {
      
          private static final SessionFactory sessionFactory;
      
          static {
              try {
                  // Create the SessionFactory from standard (hibernate.cfg.xml) 
                  // config file.
                  sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
              } catch (Throwable ex) {
                  // Log the exception. 
                  System.err.println("Initial SessionFactory creation failed." + ex);
                  throw new ExceptionInInitializerError(ex);
              }
          }
      
          public static Session getSession() {
              return sessionFactory.openSession();
          }
      }
      

      Pojo file

      Annee.java

      package net.vo;
      
      public class Annee  implements java.io.Serializable {
      
      
           private int annee;
      
          public Annee() {
          }
      
          public Annee(int annee) {
             this.annee = annee;
          }
      
          public int getAnnee() {
              return this.annee;
          }
      
          public void setAnnee(int annee) {
              this.annee = annee;
          }
      
      
      
      
      }
      

      Mapping file : Annee.hbm.xml

      <?xml version="1.0"?>
      <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
      <!-- Generated 13 mai 2014 18:23:22 by Hibernate Tools 3.2.1.GA -->
      <hibernate-mapping>
          <class name="net.vo.Annee" table="annee" catalog="base">
              <id name="annee" type="int">
                  <column name="annee" />
                  <generator class="assigned" />
              </id>
          </class>
      </hibernate-mapping>
      

      Spring AnneeMetier.java

      package model.services;
      
      import java.util.List;
      
      public interface AnneeMetier {
          public List getAllAnnees();
      }
      

      AnneeMetierImpl.java

      package model.services;
      
      import dao.AnneeDao;
      import java.util.List;
      import net.vo.Annee;
      
      public class AnneeMetierImpl implements AnneeMetier{
      
          private AnneeDao anneeDao;
      
          @Override
          public List getAllAnnees() {
                  return anneeDao.getAllAnnees();
          }
      
          public void setAnneeDao(AnneeDao anneeDao) {
              this.anneeDao = anneeDao;
          }
      
          public AnneeDao getAnneeDao() {
              return anneeDao;
          }
      
      }
      

      JSF AnneeBean.java

      package controller;
      
      import java.util.List;
      import model.services.AnneeMetier;
      import net.vo.Annee;
      
      public class AnneeBean {
      
          private AnneeMetier anneeMetier;
      
          private List<Annee> listeAnnees;
      
          public List getListeAnnees() {
              listeAnnees = anneeMetier.getAllAnnees();
              return listeAnnees;
          }
      
          public void setListeAnnees(List listeAnnees) {
              this.listeAnnees = listeAnnees;
          }
      
          public AnneeMetier getAnneeMetier() {
              return anneeMetier;
          }
      
          public void setAnneeMetier(AnneeMetier anneeMetier) {
              this.anneeMetier = anneeMetier;
          }
      
      }
      

      web.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
             <listener>
            <listener-class>
               org.springframework.web.context.ContextLoaderListener
            </listener-class>
         </listener>
         <listener>
            <listener-class>
               org.springframework.web.context.request.RequestContextListener
            </listener-class>
         </listener>
          <context-param>
              <param-name>javax.faces.PROJECT_STAGE</param-name>
              <param-value>WEB-INF/applicationContext.xml</param-value>
          </context-param>
          <servlet>
              <servlet-name>Faces Servlet</servlet-name>
              <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
              <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>Faces Servlet</servlet-name>
              <url-pattern>/faces/*</url-pattern>
          </servlet-mapping>
          <session-config>
              <session-timeout>
                  30
              </session-timeout>
          </session-config>
          <welcome-file-list>
              <welcome-file>faces/index.xhtml</welcome-file>
          </welcome-file-list>
      </web-app>
      

      applicationContext.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:aop="http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"
             xmlns:context="http://www.springframework.org/schema/context/spring-context-3.1.xsd"
             xmlns:tx="http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"
      
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/aop/spring-aop-3.1.xsd/spring-spring-aop-3.1.xsd-3.1.1.RELEASE.xsd
                http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/context/spring-context-3.1.xsd/spring-spring-context-2.5.xsd-3.1.1.RELEASE.xsd
                http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/tx/spring-tx-3.1.xsd/spring-spring-tx-3.1.xsd-3.1.1.RELEASE.xsd
      ">
           <bean id="anneeDao" class="dao.AnneeHibernateDao"></bean>
          <bean id="anneeMetier" class="model.services.AnneeMetierImpl">
              <property name="anneeDao" ref="anneeDao"/>  
          </bean>  
      
      </beans>
      

      faces-config.xml

      <?xml version='1.0' encoding='UTF-8'?>
      
      <!-- =========== FULL CONFIGURATION FILE ================================== -->
      
      <faces-config version="2.1"
          xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_1.xsd">
      
      <application>
         <variable-resolver>
            org.springframework.web.jsf.DelegatingVariableResolver
         </variable-resolver>
      </application>
       <managed-bean>
            <managed-bean-name>anneeBean</managed-bean-name>
            <managed-bean-class>controller.AnneeBean</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
         </managed-bean> 
      </faces-config>
      

      index.xhtml

      <?xml version='1.0' encoding='UTF-8' ?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:p="http://primefaces.org/ui">
          <h:head>
              <title>Facelet Title</title>
          </h:head>
          <h:body>
              <h:dataTable var="annees" value="#{anneeBean.listeAnnees}">
                          <p:column headerText="Annee">
                              <h:outputText value="#{annee.annees}"/>
                          </p:column>
                      </h:dataTable>
          </h:body>
      </html>
      

      please could you help me, i will appreciate it a lot

      edit : this is the stacktrace updated

      mai 14, 2014 1:14:41 AM org.apache.catalina.core.StandardWrapperValve invoke
      SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/testJSF_Spring_Hibernate] threw exception [Erreur lors de linjection de ressources dans le bean géré anneeBean] with root cause
      java.lang.NullPointerException
          at model.services.AnneeMetierImpl.getAllAnnees(AnneeMetierImpl.java:17)
          at controller.AnneeBean.init(AnneeBean.java:25)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:601)
          at com.sun.faces.vendor.WebContainerInjectionProvider.invokeAnnotatedMethod(WebContainerInjectionProvider.java:117)
          at com.sun.faces.vendor.WebContainerInjectionProvider.invokePostConstruct(WebContainerInjectionProvider.java:99)
          at com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:223)
          at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:105)
          at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
          at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
          at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
          at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
          at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
          at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
          at com.sun.faces.el.ChainAwareVariableResolver.resolveVariable(ChainAwareVariableResolver.java:107)
          at org.springframework.web.jsf.DelegatingVariableResolver.resolveOriginal(DelegatingVariableResolver.java:123)
          at org.springframework.web.jsf.DelegatingVariableResolver.resolveVariable(DelegatingVariableResolver.java:108)
          at com.sun.faces.el.VariableResolverChainWrapper.getValue(VariableResolverChainWrapper.java:115)
          at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
          at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
          at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:72)
          at org.apache.el.parser.AstValue.getValue(AstValue.java:161)
          at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
          at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
          at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
          at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
          at javax.faces.component.UIData.getValue(UIData.java:731)
          at javax.faces.component.UIData.getDataModel(UIData.java:1798)
          at javax.faces.component.UIData.setRowIndexWithoutRowStatePreserved(UIData.java:484)
          at javax.faces.component.UIData.setRowIndex(UIData.java:473)
          at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
          at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:820)
          at javax.faces.component.UIData.encodeBegin(UIData.java:1118)
          at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1754)
          at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
          at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
          at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
          at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
          at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
          at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
          at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
          at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
          at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
          at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
          at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
          at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
          at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
          at java.lang.Thread.run(Thread.java:722)
      

      edit 2 : this is the AnneeBean Class

      package controller;
      
      import java.util.List;
      import javax.annotation.PostConstruct;
      import model.services.AnneeMetier;
      import model.services.AnneeMetierImpl;
      import net.vo.Annee;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.context.annotation.Scope;
      import org.springframework.stereotype.Component;
      
      @Component
      @Scope("view")
      public class AnneeBean {
      
          @Autowired
          private AnneeMetier anneeMetier;
      
          private List<Annee> listeAnnees;
      
          @PostConstruct
          public void init() {
              anneeMetier = new AnneeMetierImpl();
              listeAnnees = anneeMetier.getAllAnnees();
          }
          public List getListeAnnees() {
              listeAnnees = anneeMetier.getAllAnnees();
              return listeAnnees;
          }
      
          public void setListeAnnees(List listeAnnees) {
              this.listeAnnees = listeAnnees;
          }
      
          public AnneeMetier getAnneeMetier() {
              return anneeMetier;
          }
      
          public void setAnneeMetier(AnneeMetier anneeMetier) {
              this.anneeMetier = anneeMetier;
          }
      
      }
      

      edit 3 : index.xhtml

      <?xml version='1.0' encoding='UTF-8' ?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:p="http://primefaces.org/ui"
            xmlns:f="http://java.sun.com/jsf/core">
          <h:head>
              <title>Facelet Title</title>
          </h:head>
          <h:body>
       <h:form>
           <p:dataTable var="listeAnnees" value="#{anneeBean.listeAnnees}">
                      <p:column headerText="Annee">
                          <h:outputText value="#{listeAnnees.annee}"/>
                          </p:column>
                  </p:dataTable>        
              </h:form>
          </h:body>
      </html>
      

      解决方案

      The naive solution for non-JSF developers would be to simply initialize the variables inside the getter to resolve the null value in the attributes. This is:

      public List getListeAnnees() {
          listeAnnees = getAnneeMetier().getAllAnnees();
          return listeAnnees;
      }
      
      public AnneeMetier getAnneeMetier() {
          if (anneeMetier == null) {
              anneeMetier = new AnneeMetierImpl();
          }
          return anneeMetier;
      }
      

      But this may generate lot of overhead from server in case AnneeMetier#getAllAnnees() retrieves the data from database. This is explained here: Why JSF calls getters multiple times

      To solve this, you do two things:

      1. Define the right scope of your bean.
      2. Initialize the necessary data for work using @PostConstruct annotated method.

      And this would result in:

      1. Defining the scope as @ViewScoped (explained in the link above).
      2. Initializing listeAnnees in @PostConstruct method.
      3. Remove any business logic from getters/setters

      So the code would look like this:

      @ManagedBean
      @ViewScoped
      public class AnneeBean {
          private AnneeMetier anneeMetier;
          private List<Annee> listeAnnees;
      
          @PostConstruct
          public void init() {
              anneeMetier = new AnneeMetierImpl();
              listeAnnees = anneeMetier.getAllAnnees();
          }
      
          public List getListeAnnees() {
              return listeAnnees;
          }
      
          public void setListeAnnees(List listeAnnees) {
              this.listeAnnees = listeAnnees;
          }
      
          public AnneeMetier getAnneeMetier() {
              return anneeMetier;
          }
      
          public void setAnneeMetier(AnneeMetier anneeMetier) {
              this.anneeMetier = anneeMetier;
          }
      }
      

      BUT since you're trying to integrate JSF with Spring, you have to take into account that Spring has not yet full support of JSF 2 @ViewScoped annotation. For this case, you have/need to implement it yourself. There are plenty examples on the net about this, and looks that the most popular is from Cagatay's. In this way, you'll be able to gain power from both sides. And your bean will look like this:

      @Component
      @Scope("view")
      public class AnneeBean {
          @Autowired
          private AnneeMetier anneeMetier;
          private List<Annee> listeAnnees;
      
          @PostConstruct
          public void init() {
              listeAnnees = anneeMetier.getAllAnnees();
          }
      
          public List getListeAnnees() {
              return listeAnnees;
          }
      
          public void setListeAnnees(List listeAnnees) {
              this.listeAnnees = listeAnnees;
          }
      }
      

      More info:


      Since you're learning Spring, the best bet would be to enable component scan and use annotations to configure your spring beans. Do the following:

      • Remove any bean configuration in applicationContext.xml.
      • Add this configuration to enable bean scan annotations:

        <!-- 
            These will enable component scan by annotation configuration
            rather than XML configuration. One per package
        -->
        <context:component-scan base-package="dao" />
        <context:component-scan base-package="model.services" />
        

        Or if all your classes are inside one root package.

        <!--
            Assuming there's a root package for your packages like this
        <context:component-scan base-package="com.myproject.dao" />
        <context:component-scan base-package="com.myproject.model.services" />
        -->
        <context:component-scan base-package="com.myproject" />
        

      • Start configuring your Spring managed beans by annotations:

        @Repository
        public class AnneeHibernateDao implements AnneeDao{
            //...
        }
        
        @Service
        public class AnneeMetierImpl implements AnneeMetier{
            @Autowired
            private AnneeDao anneeDao;
            //...
        }
        

      Compile your project and run it.

      这篇关于整合jsf,spring,hibernate。如何将Spring bean注入到JSF托管的bean中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆