web-dev-qa-db-fra.com

Puis-je mettre à jour un composant JSF à partir d'une méthode de bean de sauvegarde JSF?

Existe-t-il un moyen d’avoir un bean Backing JSF provoquant la mise à jour d’un composant sur la page? Je ne cherche pas à utiliser un composant ajax avec l'attribut update pour mettre à jour un composant sur la page. J'ai besoin de déclencher une mise à jour depuis une méthode de bean de sauvegarde JSF. Notez que la mise à jour sur la page peut se produire après la fin de cette méthode ou avant. J'utilise PrimeFaces, s'il existe une solution qui peut être obtenue en utilisant PrimeFaces.

93
BestPractices

À l'aide de l'API JSF standard, ajoutez l'ID client à PartialViewContext#getRenderIds() .

_FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");
_

En utilisant une API spécifique à PrimeFaces, utilisez RequestContext#update() .

_RequestContext.getCurrentInstance().update("foo:bar");
_

Depuis PrimeFaces 6.2, RequestContext#update() est obsolète, utilisez plutôt PrimeFaces::Ajax#update .

_PrimeFaces.current().ajax().update("foo:bar");
_

Si vous utilisez la bibliothèque d’utilitaires JSF OmniFaces , utilisez Ajax#update() .

_Ajax.update("foo:bar");
_

Indépendamment de la manière, notez que ces ID client doivent représenter des ID client absolus qui sont et non précédés du caractère de séparation NamingContainer comme vous le feriez faire du côté de la vue.

167
BalusC

J'ai également essayé de mettre à jour un composant à partir d'un bean/classe de support jsf

Vous devez procéder comme suit après avoir manipulé le composant d'interface utilisateur:

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())

Il est important d'utiliser le clientId au lieu du composant (côté serveur)!

9
Frithjof Schaefer

La RequestContext est déconseillée depuis Primefaces 6.2 . À partir de cette version, utilisez les éléments suivants:

if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
    PrimeFaces.current().ajax().update(componentID);
}

Et pour exécuter javascript depuis le backbean, utilisez cette méthode:

PrimeFaces.current().executeScript(jsCommand);

Référence:

7
ℛɑƒæĿ