[JSF][RichFaces][EJB-SQL] Problème incompréhensible concernant la récupération de données
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:
List<Reference> searchAtelier();
Dans la classe session, voici le contenu de la méthode citée juste au-dessus:
Code:
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:
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:
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:
<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>!!????????