복붙노트

[SPRING] 통합 jsf, 봄, 최대 절전 모드. 스프링 빈을 JSF 관리 빈에 삽입하는 방법은 무엇입니까?

SPRING

통합 jsf, 봄, 최대 절전 모드. 스프링 빈을 JSF 관리 빈에 삽입하는 방법은 무엇입니까?

JSF 2.1, Spring 3.1.1.Release, 최대 절전 모드 3.2.1을 사용하여 Java EE 프로젝트에서 작업하고 있습니다. 이제 저는 그 중 세 가지를 통합하는 단계에 있습니다. 빌드 성공, 나는 바람둥이 서버 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>

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

포조 파일

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>

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

}

을 포함한다.

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

제발 도와주세요, 많이 감사하겠습니다.

편집하다 : 이 스택 추적이 업데이트되었습니다.

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)

2 편집 : 이것은 AnnieBean 클래스입니다.

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

}

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>

해결법

  1. ==============================

    1.비 JSF 개발자를위한 순진한 솔루션은 getter 내부의 변수를 초기화하여 속성의 null 값을 해결하는 것입니다. 이것은:

    비 JSF 개발자를위한 순진한 솔루션은 getter 내부의 변수를 초기화하여 속성의 null 값을 해결하는 것입니다. 이것은:

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

    하지만 AnneeMetier # getAllAnnees ()가 데이터베이스에서 데이터를 검색하는 경우 서버로부터 많은 오버 헤드가 발생할 수 있습니다. 여기서는 JSF가 getter를 여러 번 호출하는 이유에 대해 설명합니다.

    이를 해결하기 위해 다음 두 가지 작업을 수행합니다.

    그리고이 결과는 다음과 같습니다.

    따라서 코드는 다음과 같습니다.

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

    그러나 JSF를 Spring과 통합하려고하기 때문에 Spring이 아직 JSF 2 @ViewScoped 주석을 완전히 지원하지 않는다는 점을 고려해야한다. 이 경우 사용자가 직접 구현해야합니다. 이것에 관해 그물에 대한 많은 예제들이 있으며, 가장 인기있는 것이 Cagatay 's에서 나온 것 같습니다. 이런 식으로 양쪽에서 힘을 얻을 수 있습니다. 그러면 빈은 다음과 같이 보일 것입니다.

    @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을 배우므로 구성 요소 검사를 사용하고 주석을 사용하여 스프링 빈을 구성하는 것이 가장 좋습니다. 다음을 수행하십시오.

    프로젝트를 컴파일하고 실행하십시오.

  2. ==============================

    2.당신은 초기화되지 않은 anneeMetier라는 private 객체의 메소드를 호출 할 곳인 getListeAnnees를 사용하고 있습니다. 코드에서 초기화되지 않은 setAnneeMetier 메소드를 통해 해당 객체를 초기화하므로 null입니다. 다음 중 하나를 수행하여 문제를 해결할 수 있습니다.

    당신은 초기화되지 않은 anneeMetier라는 private 객체의 메소드를 호출 할 곳인 getListeAnnees를 사용하고 있습니다. 코드에서 초기화되지 않은 setAnneeMetier 메소드를 통해 해당 객체를 초기화하므로 null입니다. 다음 중 하나를 수행하여 문제를 해결할 수 있습니다.

    편집 : pL4GU33의 의견을 유용 할 수 있으므로 답변에 그의 의견을 추가 할 :

    공용 목록 getListeAnnees () {     if (anneeMetier == null) {         return Collections.emptyList ();     }     listeAnnees = anneeMetier.getAllAnnees ();     return listeAnnees; }

    그의 해결책은 더 유형에 구속력이 없으므로 나는 그의 말을 포기한다.

  3. from https://stackoverflow.com/questions/23638664/integration-jsf-spring-hibernate-how-to-inject-spring-beans-into-jsf-managed by cc-by-sa and MIT license