У меня есть страница с данными, которая считывает данные из класса обслуживания. Этот класс услуг должен быть введен с помощью contactDAO, но он не сразу вводится. Фактически, когда страница сначала загружается, таблица данных пуста, потому что DAO еще не был введен. Однако, если я вызываю addContact(), список «контакты» обновляется отлично, потому что к нему затем вводится contactDAO.Бин Инъекция после DataTable
Как обеспечить, чтобы contactDAO вводился до того, как данные должны использовать класс обслуживания? Я использую Spring 3 и JSF 2.0.
страница с DataTable будет привязать к списку 'contactServiceImpl.contacts
':
<h:dataTable var="contact" value="#{contactServiceImpl.contacts}">
...
</h:dataTable>
Мой ContactServiceImpl выглядит следующим образом:
@Service
public class ContactServiceImpl implements ContactService {
private static List<Contact> contacts = new ArrayList<Contact>();
@Autowired
private static ContactDAO contactDAO;
private ContactServiceImpl() {
contacts = new ArrayList<Contact>();
//TODO: need to inject contactDAO at the same time as instantiation
contacts.clear();
try {
contacts.addAll(contactDAO.getContacts());
} catch (Exception e) {
e.printStackTrace();
}
}
public void addContact(Contact contact) {
contacts.add(contact);
contactDAO.addContact(contact);
contacts.clear();
contacts.addAll(contactDAO.getContacts());
}
@Autowired
public void setContactDAO(ContactDAO contactDAO) {
ContactServiceImpl.contactDAO = contactDAO;
System.out.println("DAO is injected");
}
}
И applicationContext.xml
<bean id="contactServiceImpl" class="com.example.service.ContactServiceImpl"
scope="session">
<property name="contactDAO" ref="contactDAOImpl"/>
</bean>
Введена обработка конструктора. Я отправлю, если найду другое решение. Благодарю. – Steve