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:
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 List<Reference> searchAtelier();
J'ai testé cette requête dans un <rich:datatable> et ça fonctionne.
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(); }
Voici la méthode dans le manageBean ReferenceMB qui se charge d'initialiser la liste sourceAtelier lors de la création du manageBean:
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
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); } }
. La déclaration de cet objet est relié à l'autre classe grâce à l'annotation @EJB.
Code : Sélectionner tout - Visualiser dans une fenêtre à part facade= new ReferenceFacade();
Au niveau de la page html dans la balise form à l'intérieur du body, j'ai:
É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>!!????????
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}">
Partager