Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集成jsf、spring、hibernate。如何将springbean注入JSF管理的bean?_Java_Spring_Hibernate_Jsf_Jakarta Ee - Fatal编程技术网

Java 集成jsf、spring、hibernate。如何将springbean注入JSF管理的bean?

Java 集成jsf、spring、hibernate。如何将springbean注入JSF管理的bean?,java,spring,hibernate,jsf,jakarta-ee,Java,Spring,Hibernate,Jsf,Jakarta Ee,我正在使用JSF2.1、Spring3.1.1.Release和Hibernate3.2.1框架进行JavaEE项目。现在我正处于整合这三个方面的阶段。 构建成功,我使用tomcat服务器7。但我在头版上看到了这个例外 Etat HTTP 500 - type Rapport d''exception message description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la

我正在使用JSF2.1、Spring3.1.1.Release和Hibernate3.2.1框架进行JavaEE项目。现在我正处于整合这三个方面的阶段。 构建成功,我使用tomcat服务器7。但我在头版上看到了这个例外

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.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>
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();
         }
    }


}
Pojo文件

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;
    }




}
映射文件: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>
anneemeterimpl.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;
    }

}
编辑2: 这是安尼班

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;
    }

}
包装控制器;
导入java.util.List;
导入javax.annotation.PostConstruct;
导入model.services.annemetier;
导入model.services.anneemeteriempl;
导入net.vo.Annee;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.context.annotation.Scope;
导入org.springframework.stereotype.Component;
@组成部分
@范围(“视图”)
公营安尼班{
@自动连线
私人安妮米特尔安妮米特尔;
私人名单名单;
@施工后
公共void init(){
AnneMetier=新的AnneMetierimpl();
listenenes=annemetier.getAllAnnees();
}
公共列表getListenees(){
listenenes=annemetier.getAllAnnees();
回归李斯特尼斯;
}
公共无效集合列表项(列表列表项){
this.listenenes=listenenes;
}
公共AnneMetier GetAnneMetier(){
返回退火机;
}
公共无效SetAnneMetier(AnneMetier AnneMetier){
this.annemetier=annemetier;
}
}
编辑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">
    <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>
<?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>

Facelet标题

您正在使用
getlistenees
来调用名为
annemetier
私有对象的方法,该方法尚未初始化。您可以通过
setAnneMetier
方法初始化该
对象,该方法从未在代码中初始化过,因此它是
null
。您可以通过执行以下操作之一来解决问题:

  • 在使用
    getListenees

  • 您为您的
    AnneeBean
    类实现了一个构造函数,在该类中初始化
    anneetemier

  • 您可以将getter(
    getListenes
    )修改为如下所示:

    public List getlistenees(){
    如果(AnneMetier==null){
    返回新的ArrayList();
    }
    listenenes=annemetier.getAllAnnees();
    回归李斯特尼斯;
    }

  • 编辑:pL4GU33的评论可能很有用,因此我在答案中添加了他的评论:

    public List getlistenees(){
    如果(AnneMetier==null){
    返回集合。emptyList();
    }
    listenenes=annemetier.getAllAnnees();
    回归李斯特尼斯;
    }


    他的解决方案更不区分类型,所以我支持他的评论。

    对于非JSF开发人员来说,最简单的解决方案是初始化getter中的变量,以解析属性中的
    null
    值。这是:

    public List getListeAnnees() {
        listeAnnees = getAnneeMetier().getAllAnnees();
        return listeAnnees;
    }
    
    public AnneeMetier getAnneeMetier() {
        if (anneeMetier == null) {
            anneeMetier = new AnneeMetierImpl();
        }
        return anneeMetier;
    }
    
    但是,如果
    annemetier#getAllAnnees()
    从数据库检索数据,这可能会从服务器上产生大量开销。这里解释如下:

    要解决这个问题,您需要做两件事:

  • 使用
    @PostConstruct
    带注释的方法初始化工作所需的数据
  • 这将导致:

  • 将范围定义为
    @ViewScoped
    (在上面的链接中解释)
  • @PostConstruct
    方法中初始化
    列表项
  • 从getter/setter中删除任何业务逻辑
  • 因此,代码如下所示:

    @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;
        }
    }
    
    @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;
        }
    }
    
    更多信息:


    因为您正在学习Spring,所以最好启用组件扫描并使用注释来配置Springbean。请执行以下操作:

    • 删除applicationContext.xml中的任何bean配置
    • 添加此配置以启用bean扫描注释:

      @Repository
      public class AnneeHibernateDao implements AnneeDao{
          //...
      }
      
      @Service
      public class AnneeMetierImpl implements AnneeMetier{
          @Autowired
          private AnneeDao anneeDao;
          //...
      }
      
      
      
      或者如果所有类都在一个根包中

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

    编译您的项目并运行它。

    在index.xhtml中,我调用bean AnneeBean.java公共列表getListenees()中的方法getListanees(){listenees=annemetier.getAllanees();//这里我调用spring方法return listenees;}它看起来像是“annemetier”在AnneeBean.getListenees中为null。您应该在初始化时为其设置一个空列表或进行空检查。对于3,我更希望返回集合。emptyList()。如果您以前使用过JSF 2,您会知道这不是正确的解决方案,而不是使用新的ArrayList()。@LuiggiMendoza,您能详细说明您的意见吗?这些建议有什么问题吗?请阅读此处:。因为bean是请求范围的,所以这样做意味着在每个请求上从数据库检索对象(IMO不希望这样)。这是事实,而且确实是不可取的,但是,问题是关于有一个NullPointerException,而不是最小化请求数。因此,您的观点是正确的,但我不确定我们是否在修复NullPointerException之前优化了op的方法,从而帮助了op。另外,在频繁插入、更新和删除的情况下,从每个请求的数据库中获取资源可能很有用now@Marina奇怪的是,您的spring应用程序context.xml中没有启用
    上下文。您使用的是哪个版本的Spring?我使用的是Spring 3.1.1.Release请检查如何在项目中启用组件扫描。如果这不起作用,请在project ag中手动配置每个Springbean
    
    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)
    
    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;
        }
    
    }
    
    <?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>
    
    public List getListeAnnees() {
        listeAnnees = getAnneeMetier().getAllAnnees();
        return listeAnnees;
    }
    
    public AnneeMetier getAnneeMetier() {
        if (anneeMetier == null) {
            anneeMetier = new AnneeMetierImpl();
        }
        return anneeMetier;
    }
    
    @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;
        }
    }
    
    @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;
        }
    }
    
    <!--
        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" />
    
    @Repository
    public class AnneeHibernateDao implements AnneeDao{
        //...
    }
    
    @Service
    public class AnneeMetierImpl implements AnneeMetier{
        @Autowired
        private AnneeDao anneeDao;
        //...
    }