我创建了一个使用JSF和托管bean的简单应用程序。从托管bean尝试实例化一个将数据存储到数据库的spring bean。但是,“@Autowired”注释似乎不起作用,因为我得到一个nullPointerExcpetion。我阅读了所有与Spring有关的如何使用JSF和托管bean的相关主题,但无法解决问题。 也许有人可以看看下面的一段代码,并给我一个提示?无法从托管bean实例化Spring Bean,Spring + JSF
########## ManagedBean ######### @Component @Scope("request") @Qualifier("memberBean") public class ProjectEntityHandlerBean { private List projectList; @Autowired private ProjectBeanLocal projectBean; public ProjectEntityHandlerBean() { } public List getProjectList() { return projectList; } public String getAllProjects() { projectList = projectBean.getAllProjects(); return "true"; }
的服务豆
@Service public class ProjectBean implements ProjectBeanLocal { @PersistenceContext private EntityManager em; /** * Default constructor. */ public ProjectBean() { // TODO Auto-generated constructor stub } @Transactional public List getAllProjects() { System.out.println("ProjectBean invoked"); Query query = em.createQuery("SELECT p FROM Project p"); @SuppressWarnings("unchecked") List projects = query.getResultList(); return projects; }
将在faces-config.xml
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
<managed-bean>
<managed-bean-name>loginBean</managed-bean-name>
<managed-bean-class>com.example.controller.LoginBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ProjectEntityHandlerBean</managed-bean-name>
<managed-bean-class>com.example.controller.ProjectEntityHandlerBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
您可以点击您的问题下的“编辑”并更新答案。无论如何,我提到''@ ManagedPropery'只与JSF 2.0原因一致,从JSF 2.0开始,sun实现了annoatations。较小版本不支持annoatations。因此,您必须在'faces-config.xml'中指定它们。更重要的是,如果您在'faces-config.xml'中创建了bean,并使用'@ ManagedBean'at注释了相同的bean类层次,容器只考虑xml文件中的定义。如果你在'faces-config.xml'中定义,并且如果你执行'@ ManagedPropery'来注入另一个bean,那么你将得到Null指针异常。你应该小心。 – SRy