@ManagedProperty в управляемом компоненте Spring равен нулю

У нас возникли проблемы с внедрением одного управляемого объекта в другой путем определения управляемого свойства. Я'm googling и stackoverflowing сейчас в течение 3 дней, но безрезультатно ... Я

m разрабатывается с помощью eclipse 4.2 и развертывается на интегрированном Tomcat 7

Итак, кто-нибудь может сказать мне, почему моя собственность равна нулю?

pom.xml


    UTF-8
        3.0.5.RELEASE
        1.6
        

            org.springframework
            spring-web
            ${spring.version}
        
    
        org.springframework
        spring-expression
        ${spring.version}
    
    
        org.springframework
        spring-orm
        ${spring.version}
        jar
        compile
    

web.xml

    
  
    contextConfigLocation
    /WEB-INF/applicationContext*.xml
  
  
    org.springframework.web.context.ContextLoaderListener
  

Я установил компоненты в applicationContext для сканирования аннотации @Autowired. (Да, я попробовал это без bean-компонентов в applicationContext, но ManagedProperty также не будет установлен.)

applicationContext.xml



















MainBean

package myPackage.bean;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import myPackage.model.MainModel;

@ManagedBean
@SessionScoped
public class MainBean implements Serializable {

private static final long serialVersionUID = 1L;

private static final Logger logger = LoggerFactory.getLogger(MainBean.class);

private MainModel model;

/**
 * @return the model
 */
public MainModel getModel() {
    if (model == null) {
        model = new MainModel();
    }
    return model;
}

/**
 * @param model the model to set
 */
public void setModel(MainModel model) {
    this.model = model;
    }
}

UserBean

package myPackage.bean;

import java.io.Serializable;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import myPackage.dao.UserDao;
import myPackage.entity.User;

@ManagedBean
@RequestScoped
public class UserBean implements Serializable {

private static final long serialVersionUID = 1L;

private static final Logger logger = LoggerFactory.getLogger(UserBean.class);

@ManagedProperty(value="#{mainBean}")
private MainBean mainBean;

@Autowired
private UserDao userDao;

/**
 * @return the mainBean
 */
public MainBean getMainBean() {
    return mainBean;
}

/**
 * @param mainBean the mainBean to set
 */
public void setMainBean(MainBean mainBean) {
    this.mainBean = mainBean;
}

public String doLogin() {
    User user = userDao.getUserByUsernameAndPassword(getMainBean().getModel().getUser().getUsername(), getMainBean().getModel().getUser().getPassword());
    if (user != null) {
        getMainBean().getModel().setUser(user);
        logger.info("User '"+getMainBean().getModel().getUser().getUsername()+"' logged in");
        getMainBean().getModel().setSelectedTab(0);
    } else {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Login failed", "Username and/or password wrong!"));
        logger.warn("User '"+getMainBean().getModel().getUser().getUsername()+"' login failed");
    }
    return null;
}

UserDao

package myPackage.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import myPackage.entity.User;

@Repository
public class UserDao {

@PersistenceContext
private EntityManager entityManager;

@Transactional
public void save(User user) {
    if (user.getId() == null) {
        entityManager.persist(user);    
    } else {
        entityManager.merge(user);
    }
}

@SuppressWarnings("unchecked")
public List list() {
    return entityManager.createQuery("select u from User u")
            .getResultList();
}

public User getUserByUsername(String username) {
    try {
        Query q = entityManager.createQuery("select u from User u where u.username = :username");
        q.setParameter("username", username);
        User u = (User) q.getSingleResult();
        return u;
    } catch (Exception e) {
        return null;
    }
}

public User getUserByUsernameAndPassword(String username, String password) {
    try {
        Query q = entityManager.createQuery("select u from User u where u.username = :username and u.password = :password");
        q.setParameter("username", username);
        q.setParameter("password", password);
        User u = (User) q.getSingleResult();
        return u;
    } catch (Exception e) {
        return null;
    }
}

@Transactional
public User getUserById(Long id) {
    return entityManager.find(User.class, id);
}

@Transactional
public void delete(User user) {
    entityManager.remove(user);
}

public void deleteById(Long id) {
    delete(getUserById(id));
}

}

А теперь исключение ...

Caused by: java.lang.NullPointerException
    at myPackage.bean.UserBean.doLogin(UserBean.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)

Строка 47:

    User user = userDao.getUserByUsernameAndPassword(getMainBean().getModel().getUser().getUsername(), getMainBean().getModel().getUser().getPassword());

Отладка показывает, что getMainBean () возвращает null.I '

м открыт для предлагает улучшить мою концепцию!

Ответы на вопрос(1)

Ваш ответ на вопрос