質問

サービスクラスのデータを読み取るデータテーブルを備えたページがあります。そのサービスクラスにはContactDaoが注入されると想定されていますが、すぐに注入されません。実際、ページが最初にロードされると、DAOがまだ注入されていないため、データテーブルは空です。ただし、AddContact()に電話すると、ContactDaoが注入されるため、リスト「コンタクト」が正常に更新されます。

データテーブルがサービスクラスを使用する必要がある前に、ContactDaoが注入されるようにするにはどうすればよいですか?春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>

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top