Question

J'ai une page avec un DataTable qui lit les données d'une classe de service. Cette classe de service est censée être injectée avec un ContactDAO mais il n'est pas injecté immédiatement. En fait, lorsque la page se charge pour la première fois, le tableau de données est vide car le DAO n'a pas encore été injecté. Cependant, si j'appelle addContact (), la liste «contacts» est très mise à jour car le contact est injecté d'ici là.

Comment puis-je m'assurer que ContactDAO est injecté avant que la DataTable ne doit utiliser la classe de service? J'utilise Spring 3 et JSF 2.0.

La page avec le dataTable est liée à la liste 'contactServiceImpl.contacts':

<h:dataTable var="contact" value="#{contactServiceImpl.contacts}">
...
</h:dataTable>

Mon contact ContactSerImpl ressemble à ceci:

@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");
    }
}

Et applicationContext.xml

  <bean id="contactServiceImpl" class="com.example.service.ContactServiceImpl"
        scope="session">
        <property name="contactDAO" ref="contactDAOImpl"/>
  </bean>

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top