Bonjour, je suis depuis une journée entière face à un problème incompréhensible:
Je travaille sur un projet professionnel avec NetBeans la dernière version du jdk (1.6 et quelques), j'utilise PostGreSQL comme SGBDR et j'utilise les frameworks suivants:JSF, Richfaces, Facelets.

Je dois utiliser le composant <rich:listShuttle> afin de sélectionner des références.

L'entity en question se nomme Reference.
La session concernée au niveau de l'interface possède dans la déclaration la ligne suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
List<Reference> searchAtelier();
Dans la classe session, voici le contenu de la méthode citée juste au-dessus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
    @Override
    public List<Reference> searchAtelier()
    {
         Query  query = em.createQuery("SELECT r FROM Reference AS r where r.typeReference='ATELIER'");
         return query.getResultList();
    }
J'ai testé cette requête dans un <rich:datatable> et ça fonctionne.

Voici la méthode dans le manageBean ReferenceMB qui se charge d'initialiser la liste sourceAtelier lors de la création du manageBean:
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
20
21
22
23
    private void initSource()
    {
        List<Reference> init =new ArrayList<Reference>();
        facade=new ReferenceFacade();
        try
        {
            System.out.println(facade.searchAtelier().size());
            init=(ArrayList<Reference>)facade.findAll();
        }
        catch(Exception e)
        {
            System.out.println("ReferenceMB==>"+e.getMessage());
        }
        if(init.size()>0)
        {
            for(Reference ref:init)
            {
                Atelier at=new Atelier();
                at.setNom(ref.getNomReference());
                at.setUnite(Integer.parseInt(ref.getUniteReference()));
                sourceAtelier.add(at);
            }
        }
facade correspond à un ReferenceFacadeRemote (qui a été initialisé avant l'appelle de la méthode initsource de cette manière:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
facade= new ReferenceFacade();
. La déclaration de cet objet est relié à l'autre classe grâce à l'annotation @EJB.

Au niveau de la page html dans la balise form à l'intérieur du body, j'ai:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<rich:listShuttle id="myListShuttle" converter="listeAtelierConverter" sourceValue="#{ReferenceMB.sourceAtelier}" targetValue="#{MetascenarioMB.metascenario.atelierCollection}" sourceRequired = "true" targetRequired = "true" var="items" sourceCaptionLabel="#{msg.Available_Workshop}" targetCaptionLabel="#{msg.Chosen_Workshop}">
Étant donné que j'utilise des try/catch la page s'affiche mais le listeShuttle est vide et dans la console de glassfishV2 j'ai ReferenceMB=>null (correspondant en faite au System.out.println("ReferenceMB==>"+e.getMessage()); de la méthode d'initialisation citée précédemment). Lorsque j'enlève cette partie du code du try/catch j'obtiens un message comme quoi ReferenceMB n'a pu être construit. Normal vu que cette méthode est appelée dans le constructeur donc il y a une réaction en chaîne. Le problème c'est que l'erreur renvoie sur la requête SQL... QUI EST BONNE lorsqu'on utilise celle-ci dans un <rich:datatable>!!????????