【发布时间】:2012-10-19 15:24:25
【问题描述】:
我正在尝试使用 @ManagedProperty 注释在 JSF ManagedBean 中使用 spring 容器中创建的 bean。但是在使用该 bean 时我得到空指针。一旦我启动我的服务器,我可以看到我的 bean 是在这里创建的
Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@9d532ae: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,userBean,userService];
HomepageBean.java
package come.test.backingbean
@ManagedBean
@sessionScoped
public Class HomepageBean{
@ManagedProperty(value="#{userBean}")
private UserBean userBean;// getters and setters
public String doLogin() {
String url = "login.xhtml";
LoginBean manager = new LoginBean(); // This bean has a condition which check for Username and password entered by user.
if (manager.auth(username, password)) {
isLoggedIn = true;
url = "homepage";
String username=sample;
userBean.getUserInfo(username);
} else {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(username, new FacesMessage(
"Invalid Username and or Password"));
}
return url;
}
UserBean.java
package com.test.mypackage
@Component
Public Class UserBean{
@Autowired
private UserService userServie // getters and setters.
public void getUserInfo(String userId){
userService.findByUserId(userId)
}
}
}
用户服务.java
package com.test.service;
public interface UserService {
public void save(User User);
public void update(User user);
public void delete(User user);
public User findByUserId(String userId);
}
我可以看到我的服务器何时启动我尝试使用的 bean 是预先实例化的。我将 web.xml 中的 applicationContext.xml 定义为 Context-param。我正在像这样定义Spring.xml 中的所有豆类
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com.test" />
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
</beans>
在我的类路径中并将其作为资源导入applicationContext.xml。
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<import resource="classpath:database/DataSource.xml" />
<import resource="classpath:database/Hibernate.xml" />
<import resource="classpath:config/Spring.xml" />
</beans>
我的面孔-confi.xml
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
<resource-bundle>
<base-name>com.test.boundles.messages</base-name>
<var>msg</var>
</resource-bundle>
</application>
我的方法有任何问题。
【问题讨论】:
-
这只是一个细节;但是您的代码甚至根本无法编译。如果您无法从头开始编写可编译的代码,请考虑使用复制粘贴。这可以防止红鲱鱼。
-
@BalusC...嘿,你现在可以检查一下我更新了我的问题吗?
-
不,春天已经超越了我。
-
好的,谢谢。但是我想知道像你这样精通java的人怎么不进入春天?
-
为什么你选择 Spring 而不是 EJB3+CDI(标准 Java EE 堆栈提供)?我想答案基本上是一样的。
标签: jsf-2 nullpointerexception spring-3