Невозможно ввести источник данных в управляемый компонент - PullRequest
1 голос
/ 11 ноября 2011

Привет! Я пытаюсь загрузить список загружаемых учениками страниц в JSF, используя тег h: datatable

<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 переменной в другом сервлете возможность создать соединение,

так в чем же проблема в вышеупомянутом управляемом компоненте,

почему источник данных равен нулю? Контейнер не может внедрить ресурс, почему?

пожалуйста, помогите мне

1 Ответ

4 голосов
/ 11 ноября 2011

В дополнение к комментарию Бьёрнса: Инъекция выполняется после построения, и вы вызываете свой метод init из конструктора.

Вы можете аннотировать свой метод init() с помощью @PostConstruct.Затем он будет вызываться после построения, а не во время построения.

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

Затем метод init вызывается каждый раз, когда создается компонент (в зависимости от области действия вашего компонента).

...