无法在Managed Bean中注入Datasource

时间:2011-11-11 07:19:04

标签: java jsf dependency-injection jsf-2

您好我正在尝试使用h:datatable标记加载JSF中的学生页面列表

<h:dataTable value="#{studentBean2.studentList}" var="student">
  ......
  .....
</h:datatable>

现在我的ManagedBean如下

public class StudentBeanTwo {
     public StudentBeanTwo() {
         init();
     }

@Resource(name="jdbc/rahul_sample_pool",type=DataSource.class)
private  DataSource dataSource; 

private void init(){
    .......
    ....... 
    if(this.getStudentList() == null){
       loadStudents();              
    }   
}

private void loadStudents() throws Exception{
    Connection con = null;
    .....
    .....
    try{

       if(this.dataSource == null){
          System.out.println(" DataSource() is null  ");
       }
       con = this.dataSource.getConnection();
       ........
    }
}

现在我的问题是为什么我的数据源为空,

我通过将@Resource注释到另一个servlet中的变量来检查 能够创建连接,

那么上面的托管bean中的问题是什么呢,

为什么datasource为null? 容器无法注入资源,为什么?

请帮帮我

1 个答案:

答案 0 :(得分:4)

除了Björns评论:注入是在构建之后完成的,你从构造函数中调用你的init方法。

您可以使用init()@PostConstruct方法添加注释。然后它将在施工后调用,而不是在施工期间调用。

import javax.annotation.PostConstruct;
...
    @PostConstruct
    private void init(){
        ...
        if(this.getStudentList() == null){
           loadStudents();              
        }   
    }

然后每次构造bean时都会调用init方法(取决于bean的作用域)。