Question

Je veux créer dynamiquement des contrôles dans mon haricot. J'utilise JSF 2.0

HtmlOutputTag objHtmlOutputTag = new HtmlOutputTag();

quelle propriété de HtmlOutputTag dois-je configurer pour définir le contenu de HtmlOutputTag?

Était-ce utile?

La solution

Le HtmlOutputTag représente une étiquette, pas un composant. utiliser plutôt HtmlOutputText. Ensuite, vous pouvez simplement définir la propriété value, exactement comme vous le feriez dans un vrai composant dans la page JSF. Si vous avez besoin d'être un ValueExpression plutôt qu'une value cru, alors vous devez créer à l'aide ExpressionFactory#createValueExpression() . Voici un exemple de coup d'envoi:

HtmlOutputText text = new HtmlOutputText();
text.setValueExpression("value", createValueExpression("#{bean.property}", String.class));

où la méthode pratique createValueExpression() regarder ici comme:

private static ValueExpression createValueExpression(String valueExpression, Class<?> valueType) {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getApplication().getExpressionFactory()
        .createValueExpression(context.getELContext(), valueExpression, valueType);
}

cacher loin dans une classe utilitaire afin que vous n'avez pas besoin de répéter tout ce nouveau code et à nouveau,.) L'argument valueType devrait représenter évidemment le type de la propriété réelle

Le résultat final dans la page JSF devrait alors ressembler à ceci:

<h:outputText value="#{bean.property}" />

Cela dit, en fonction de l'exigence fonctionnelle, il peut en effet être de meilleurs moyens et plus propres pour résoudre l'exigence fonctionnelle. Si vous le souhaitez, vous pouvez élaborer un peu plus à ce sujet afin que nous puissions, si nécessaire suggérer de meilleures façons.

Autres conseils

d'habitude, mon conseil serait de ne pas ajouter / supprimer dynamiquement composant. Résoudre votre problème d'une autre façon:

  • Activer visibilité des composants
  • Rebind les données appartenant à un composant

Ajout / suppression de composants est toujours dynamiquement une source de problèmes et les chances sont que vous pouvez le faire d'une autre manière beaucoup plus simple.

Le composant outputText est facile à utiliser:

<h:outputText value="#{BackingBean.myProperty}"/>

Et vous définissez un getter / setter pour myProperty dans votre backing bean. Si vous voulez vraiment faire programmatiquement (que je décourager sauf si vous avez de solides arguments), est ici une exemple avec une table dynamique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top