@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 '
м открыт для предлагает улучшить мою концепцию!