Domanda

Ho una pagina con un datatato che legge i dati di una classe di servizio. Si suppone che quella classe di servizio sia iniettata con un contactdao ma non viene iniettata immediatamente. In effetti, quando la pagina si carica per la prima volta, la tabella dei dati è vuota perché il DAO non è stato ancora iniettato. Tuttavia, se chiamo addContact (), l'elenco "contatti" viene aggiornato bene perché il contatto viene iniettato da allora.

Come posso assicurarmi che il contatto venga iniettato prima che il dati sia necessario utilizzare la classe di servizio? Sto usando Spring 3 e JSF 2.0.

La pagina con il dataTable è legata all'elenco 'contactServiceImpl.contacts':

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

Il mio contactServiceImpl sembra così:

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

E applicationContext.xml

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

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top