Salut,
j'ai récemment dû créer dynamiquement des UIComponents dans mon viewroot et j'ai eu un problème similaire.
Lorsque j'ajoutais un composant, j'avais l'impression qu'il parcourait d'abord son arbre pour contrôler si un composant similaire n'avait pas été déjà crée. Et donc j'avais des comportements très étranges. Parfois il ne me créait pas le composant, parfois il l'initialisait avec des anciennes valeur etc...
Ce que j'ai fait pour contourner le problème, c'est que pour toute création de composant je passe par une méthode qui contrôle l'existence du composant avant de le créer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| /**
* Création ou récupération d'un composant déjà existant ayant le même nom.
* @param componentType Type du composant à créer
* @param componentName Nom du composant à créer
* @return Le composant crée ou trouvé
*/
private UIComponent createComponent(final String componentType, final String componentName) {
final Application application = FacesContext.getCurrentInstance().getApplication();
UIComponent component = null;
try {
component = FacesContext.getCurrentInstance().getViewRoot().findComponent(componentName);
LOG.info("Le composant " + componentName + " a été trouvé.");
} catch (Exception e) {
LOG.info("Le composant " + componentName + " n'a pas été trouvé, création. " + e);
}
if (component == null)
component = application.createComponent(componentType);
return component;
} |
Et pour créer mon composant:
HtmlInputHidden inputHidden = (HtmlInputHidden) createComponent(HtmlInputHidden.COMPONENT_TYPE, "parameterModulation");
ça ne répond pas directement à ton problème à mon avis mais ça pourra sans doute te guider.
Partager