Bonjour !

J'ai 2 entités (Client et Contact), un stateless session bean, un controller jsf, et plusieurs pages jsp...

Un client se connecte, je garde mon controller dans ma session
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
@ManagedBean
@SessionScoped
public class AccountController extends AbstractController
, je modifie mes données, et visualise les contacts que je peux également modifier....


Je voudrais pouvoir recharger (ou rafraichir mon stateless bean) lorsque je navigue dans mes pages pour voir si des modifications ont été réalisées entre temps....


Pour l'instant, dans mon stateless je rechargeais toujours mon entity en créant une autre instance :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

   @Override
    public Client findClient(int id) {
        Client client = em.find(Client.class, id);
        return client;
    }

    @Override
    public List<Contact> findContacts(Client client) {
        return findClient(client.getId).getContactList();
    }

    @Override
    public Client refreshClient(Client client) {
        return findClient(client.getId);
    }
Puis j'ai pensé à faire de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

   @Override
    public Client findClient(int id) {
        Client client = em.find(Client.class, id);
        return client;
    }

    @Override
    public List<Contact> findContacts(Client client) {
        em.refresh(client);
        return client.getContactList();
    }

    @Override
    public Client refreshClient(Client client) {
        em.refresh(client);
        return client;
    }
Mais là... une belle petite exception :
java.lang.IllegalArgumentException: Can not refresh not managed object
Donc, il est possible de rafraichir qu'après un "persist" ou un "merge"...

Alors, est-ce que ma 1ère méthode est bonne ?

Merci