À de nombreux endroits, on peut trouver l'utilisation d'une fonction PF
avec Primefaces. Par exemple dans ce réponse
D'après ce que j'ai vu jusqu'à présent, il semble que ce soit une fonction magique de "faire fonctionner un peu mieux". Mais je ne crois pas à ce genre de choses donc:
Que fait cette fonction?
Et où puis-je trouver de la documentation à ce sujet?
PF
est une fonction Javascript.
Dans Primefaces 4.0, la portée Javascript des widgets a changé. Avant la version 4.0, vous pouviez ouvrir un widget de dialogue avec widgetVar.show();
.
Dans Primefaces 4.0 et supérieur, les widgets sont stockés dans un tableau de widgets Javascript. Lorsque vous appelez PF ('widgetVar'), il recherche le widget dans le tableau et le renvoie.
PF=function(d){
var c=b.widgets[d];
if(!c){
if(a.console&&console.log){
console.log("Widget for var '"+d+"' not available!")
}
b.error("Widget for var '"+d+"' not available!")
}
return c
};
Je n'ai pas trouvé grand-chose à ce sujet non plus, c'est ce que j'ai pu déchiffrer à l'aide des outils de développement de Chrome.
La fonction PF
fait partie de l'API JavaScript de PrimeFaces. Il recherche un objet Javascript qui est l'épine dorsale du composant JSF côté client. Voici sa définition ( source ):
PF = function(widgetVar) {
var widgetInstance = PrimeFaces.widgets[widgetVar];
if (!widgetInstance) {
PrimeFaces.error("Widget for var '" + widgetVar + "' not available!");
}
return widgetInstance;
};
PF
est un raccourci pour PrimeFaces.widgets['someWidgetId']
, qui recherche simplement un objet Javascript dans une portée globale, et donc l'objet Javascript peut également être récupéré à l'aide de window['someWidgetId']
.
L'API Javascript de PrimeFaces n'a pas de documentation officielle en ligne, donc pour comprendre ce que vous pouvez vraiment "faire" avec l'objet Javascript, vous devrez plonger dans PrimeFaces.
Pour les autres utilisateurs Primefaces venant ici lors de la mise à niveau vers la version 4.0 et supérieure, il est possible de contourner la nécessité d'utiliser PF('yourWidgetVar').someFunction()
et d'utiliser simplement yourWidgetVar.someFunction()
directement comme vous le feriez avant la version 4.0. Vous avez juste besoin de la configuration suivante dans web.xml:
<context-param>
<param-name>primefaces.LEGACY_WIDGET_NAMESPACE</param-name>
<param-value>true</param-value>
</context-param>
Dans le Guide de l'utilisateur Primefaces:
Active la portée de la fenêtre afin que les widgets soient accessibles à l'aide de widgetVar.method () en plus de l'approche par défaut de l'espace de noms PF comme PF ('widgetVar'). Method ().
Évidemment, vous seriez sensible aux conflits/pollutions de l'espace de noms que cette fonctionnalité a été créée pour éviter, mais c'est utile si vous souhaitez migrer vers une nouvelle version en petites étapes et isoler les incompatibilités introduites par la nouvelle version.