bonjour tout le monde,
pour les besoins de mon application, j'ai créé un selectOneMenu à partir de 2 entités, afin de differencier les 2 au sein de ce composant, les valeurs pris en parametre du selectItem sont donc : 1 objet (pour la valeur retournée) et 1 String (pour le libelle)
jusqu'ici tout va bien.....
Cependant afin que tout ceci marche correctement je dois mettre en place un converter et la methode getAsObject me pose probleme, je ne vois pas du tout comment l'implementer, getAsString c'est fait
Mon selectitems
et mon converterCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 /** * Positionne la liste des items de ressources */ private void setAllUTRessourceAsSelectItems() { if (allUniteTravailRessourceItems != null) { allUniteTravailRessourceItems.clear(); } else { allUniteTravailRessourceItems = new ArrayList<SelectItem>(); } // Traitement pour la recuparation des unites de travail List<UniteTravail> unites = new ArrayList<UniteTravail>(); try { unites = publicFacade.uniteTravailFindByCriteres(null, null, null); } catch (Exception ex) { logger.error(ex.getMessage()); return; } //Traitement pour la recuparation des ressources List<Ressource> ressources = new ArrayList<Ressource>(); try { ressources = publicFacade.ressourceFindByCriteres(null, Statut.ENABLE); } catch (Exception ex) { logger.error(ex.getMessage()); return; } //Creation de la liste : UniteTravail + Ressources allUniteTravailRessourceItems.add(new SelectItem("","-- Liste des Groupes --")); for (UniteTravail item : unites) { String libelle = item.getLibelle(); allUniteTravailRessourceItems.add(new SelectItem(item, libelle)); } allUniteTravailRessourceItems.add(new SelectItem("","")); allUniteTravailRessourceItems.add(new SelectItem("","-- Liste des Ressources --")); for (Ressource item : ressources) { UniteTravail utItem = publicFacade.uniteTravailFindByPrimaryKey(item.getUnitetravail().getIdunitetravail()); String libelle = item.getNomPrenomsAsString(); allUniteTravailRessourceItems.add(new SelectItem(item, libelle+" ("+utItem.getLibelle()+")")); } }
la je seche 8OCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 public class UniteTravailRessourceConverter implements Converter { public Object getAsObject(FacesContext context, UIComponent component, String value) { if (context == null || component == null) throw new NullPointerException(); if (value == null) return null; value = value.trim(); if (value.length() < 1) return null; PublicFacade publicFacade = ServiceLocator.getLocator() .getPublicFacade(); try{ Integer idressource = Integer.parseInt(value); return publicFacade.ressourceFindByPrimaryKey(idressource); }catch(NumberFormatException nfe){ try{ return publicFacade.uniteTravailFindByCriteres(value,null,null); }catch(Exception e){ e.getCause().getMessage(); return null; } } /*if (context == null || component == null) throw new NullPointerException(); if (value == null) return null; value = value.trim(); if (value.length() < 1) return null; try { PublicFacade publicFacade = ServiceLocator.getLocator() .getPublicFacade(); if(value.getClass().equals(UniteTravail.class)){ return publicFacade.uniteTravailFindByPrimaryKey(Integer.parseInt(value)); }else if(value.getClass().equals(Ressource.class)){ return publicFacade.ressourceFindByPrimaryKey(Integer.parseInt(value)); } } catch (Exception e) { throw new ConverterException(Util .getExceptionMessage(Util.CONVERSION_ERROR_MESSAGE_ID)); } */ } public String getAsString(FacesContext context, UIComponent component, Object value) { if (context == null || component == null) throw new NullPointerException(); if (value == null) return ""; if (value instanceof String) return (String) value; try { if(value.getClass().equals(UniteTravail.class)){ UniteTravail utr = (UniteTravail)value; return utr.getLibelle(); }else if(value.getClass().equals(Ressource.class)){ Ressource utr = (Ressource)value; return utr.getIdressource().toString(); } return ""; } catch (Exception e) { throw new ConverterException(Util .getExceptionMessage(Util.CONVERSION_ERROR_MESSAGE_ID)); } } }
Apparement le ti bout de code que j'ai créé me retourne bien 1 objet (celui desiré selon le cas) mais rien ne se passe par la suite :?