Spring DAO ist nicht injiziert, die in JSF managed bean

Ich bin mit JSF2+Spring3.1+Hibernate4 in meiner demo-Anwendung, und ich werde verwenden möchten annotation zu erstellen, session-factory, aber mein DAO-Klasse wird nicht initialisiert, die in Jsf Managed Bea Klasse, so bin ich immer Null-Zeiger-Ausnahme.
Meine applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                http://www.springframework.org/schema/tx 
                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:annotation-config></context:annotation-config>

    <context:component-scan base-package="com.otv"></context:component-scan>


    <!-- Data Source Declaration -->
    <bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  >
        <property name="driverClass" value="org.postgresql.Driver" />   
        <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/postgres" />   
        <property name="user" value="postgres" />   
        <property name="password" value="hariom" /> 
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" /> 
    </bean>

    <!-- Session Factory Declaration -->
    <bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean ">
        <property name="dataSource" ref="DataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.otv.model.User</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
          <property name="packagesToScan" value="com.otv.user"></property>
    </bean>


    <!-- Transaction Manager is defined -->
    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" >
       <property name="sessionFactory" ref="SessionFactory"/>
    </bean>


  <!-- Enable the configuration of transactional behavior based on annotations -->
    <tx:annotation-driven transaction-manager="txManager"/>

</beans>

UserDAO.java Klasse

package com.otv.user.dao;

import java.util.List;

import com.otv.model.User;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

/**
 * 
 * User DAO
 * 
 * @author onlinetechvision.com
 * @since 25 Mar 2012
 * @version 1.0.0
 *
 */

@Repository
@Transactional
public class UserDAO   {

    @Autowired
    private SessionFactory sessionFactory;

    /**
     * Get Hibernate Session Factory
     * 
     * @return SessionFactory - Hibernate Session Factory
     */
/*  public SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    *//**
     * Set Hibernate Session Factory
     * 
     * @param SessionFactory - Hibernate Session Factory
     *//*
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }*/



    /**
     * Add User
     * 
     * @param  User user
     */
    public void addUser(User user) {
        sessionFactory.getCurrentSession().save(user);
    }

    /**
     * Delete User
     * 
     * @param  User user
     */
    public void deleteUser(User user) {
        sessionFactory.getCurrentSession().delete(user);
    }

    /**
     * Update User
     * 
     * @param  User user
     */
    public void updateUser(User user) {
        sessionFactory.getCurrentSession().update(user);
    }

    /**
     * Get User
     * 
     * @param  int User Id
     * @return User 
     */
    public User getUserById(int id) {
        List list = sessionFactory.getCurrentSession()
                                            .createQuery("from User where id=?")
                                            .setParameter(0, id).list();
        return (User)list.get(0);
    }

    /**
     * Get User List
     * 
     * @return List - User list
     */
    public List<User> getUsers() {
        List list = sessionFactory.getCurrentSession().createQuery("from User").list();
        return list;
    }

}

UND meiner managedBean Klasse

package com.otv.managed.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;

import com.otv.model.User;
import com.otv.user.dao.UserDAO;
import com.otv.user.service.IUserService;

/**
 * 
 * User Managed Bean
 * 
 * @author onlinetechvision.com
 * @since 25 Mar 2012
 * @version 1.0.0
 *
 */
@ManagedBean(name="userMB")
@RequestScoped
public class UserManagedBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private static final String SUCCESS = "success";
    private static final String ERROR   = "error";

    //Spring User Service is injected...


    List<User> userList;

    private int id;
    private String name;
    private String surname;

      @Autowired
      private UserDAO userDAO;
    /**
     * Add User
     * 
     * @return String - Response Message
     */
    public String addUser() {
        try {
            User user = new User();
            user.setId(getId());
            user.setName(getName());
            user.setSurname(getSurname());
            userDAO.addUser(user);
            return SUCCESS;
        } catch (DataAccessException e) {
            e.printStackTrace();
        }   

        return ERROR;
    }

    /**
     * Reset Fields
     * 
     */
    public void reset() {
        this.setId(0);
        this.setName("");
        this.setSurname("");
    }

    /**
     * Get User List
     * 
     * @return List - User List
     */
    public List<User> getUserList() {
        userList = new ArrayList<User>();
        userList.addAll(userDAO.getUsers());
        return userList;
    }

    /**
     * Get User Service
     * 
     * @return IUserService - User Service
     */

    /**
     * Set User List
     * 
     * @param List - User List
     */
    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    /**
     * Get User Id
     * 
     * @return int - User Id
     */
    public int getId() {
        return id;
    }

    /**
     * Set User Id
     * 
     * @param int - User Id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * Get User Name
     * 
     * @return String - User Name
     */
    public String getName() {
        return name;
    }

    /**
     * Set User Name
     * 
     * @param String - User Name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Get User Surname
     * 
     * @return String - User Surname
     */
    public String getSurname() {
        return surname;
    }

    /**
     * Set User Surname
     * 
     * @param String - User Surname
     */
    public void setSurname(String surname) {
        this.surname = surname;
    }

}

Nun in der Managedbean Methode DAO-Objekt null ist und ich bin immer Null-Zeiger-Ausnahme

WARNUNG: #{userMB.addUser}: java.lang.NullPointerException
javax.Gesichter.FacesException: #{userMB.addUser}:
java.lang.NullPointerException bei
com.Sonne.Gesichter.- Anwendung.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
bei javax.Gesichter.Komponente.UICommand.broadcast(UICommand.java:315) at
javax.Gesichter.Komponente.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
bei
javax.Gesichter.Komponente.UIViewRoot.processApplication(UIViewRoot.java:1259)
bei
com.Sonne.Gesichter.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
bei com.Sonne.Gesichter.lifecycle.Phase.doPhase (- Phase.java:101) at
com.Sonne.Gesichter.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
bei javax.Gesichter.webapp.FacesServlet.service(FacesServlet.java:593) an
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
bei
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
bei
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
bei
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
bei
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
bei
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
bei
org.apache.catalina.Ventile.ErrorReportValve.invoke(ErrorReportValve.java:98)
bei
org.apache.catalina.Ventile.AccessLogValve.invoke(AccessLogValve.java:927)
bei
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
bei
org.apache.catalina.- Anschluss.CoyoteAdapter.service(CoyoteAdapter.java:407)
bei
org.apache.coyote.http11.AbstractHttp11Processor.Prozess(AbstractHttp11Processor.java:1001)
bei
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.Prozess(AbstractProtocol.java:585)
bei
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
bei
java.util.gleichzeitige.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
bei
java.util.gleichzeitige.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
bei java.lang.Thread.run(Thread.java:662), Verursacht durch:
javax.Gesichter.el.EvaluationException: java.lang.NullPointerException bei
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
bei
com.Sonne.Gesichter.- Anwendung.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 23 mehr Verursacht durch: java.lang.NullPointerException bei
com.otv.verwaltete.bean.UserManagedBean.addUser(UserManagedBean.java:57)
bei der sun.reflektieren.NativeMethodAccessorImpl.invoke0(Native Method) at
Sonne.reflektieren.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
bei
Sonne.reflektieren.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
bei java.lang.reflektieren.Methode.invoke(Method.java:597) at
org.apache.el.parser.AstValue.invoke(AstValue.java:264) at
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
bei
com.Sonne.Gesichter.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
bei
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 24 mehr

  • Sie können nicht injizieren, spring beans in JSF mit Autowired.verwenden Sie @ManagedProperty auf UserDAO statt Autowired.Und Sie müssen entfernen Sie alle Einträge im faces-coifig.xml zu vermeiden ausblenden von Beschriftungen, indem Sie XML Konfiguration..Sie können einen Blick auf diesen Frühling website für zusätzliche Konfiguration .static.springsource.org/spring/docs/2.5.x/api/org/...
  • Leider kann man nicht injizieren, Spring beans in JSF managed beans mit @ManagedProperty entweder. Die Injektion wie dies funktionieren könnte, aber nur für @SessionScoped oder @RequestScoped Bohnen, weil diese Anmerkungen übersetzt wird @Scope("session") und @Scope("request") jeweils, zwingen Bohnen verwaltet werden, die von Frühling und Leben in seinem Zusammenhang, aber dennoch, aufgrund deklariert faces-config.xml EL-resolver werden Sie vollständig sichtbar in der JSF-views. Einfach nicht betrügen sich selbst und lassen Sie es sein das Spring-framework wird die Verwaltung Ihrer Bohnen.
  • Also, was ist die beste Lösung?
  • Wie kann die UserManagedBean Serialisierbar, wenn es eine nicht-transiente Feld UserDAO?
InformationsquelleAutor Subodh Joshi | 2013-02-08
Schreibe einen Kommentar