サービス クラスからデータを読み取るデータ テーブルを含むページがあります。そのサービス クラスは contactDAO で注入されると想定されていますが、すぐには注入されません。実際、ページが最初にロードされるとき、DAO がまだ挿入されていないため、データ テーブルは空です。ただし、addContact() を呼び出すと、それまでに contactDAO が挿入されるため、「連絡先」リストは正常に更新されます。
データテーブルがサービス クラスを使用する必要がある前に、contactDAO が確実に挿入されるようにするにはどうすればよいですか? Spring 3 と JSF 2.0 を使用しています。
データテーブルを含むページはリスト ' ' にバインドされています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>