Primefaces 中的 PF 功能有啥作用?

Posted

技术标签:

【中文标题】Primefaces 中的 PF 功能有啥作用?【英文标题】:What does the PF function do in Primefaces?Primefaces 中的 PF 功能有什么作用? 【发布时间】:2014-07-03 23:13:00 【问题描述】:

在很多地方都可以找到函数PF 与 Primefaces 的用法。例如在这个answer

从我目前看到的情况来看,这似乎是一个神奇的“让它工作得更好”的功能。但我不相信这种东西所以:

这个函数有什么作用?

我在哪里可以找到有关它的文档?

【问题讨论】:

哇,好问题,我为什么没想到……:O 【参考方案1】:

PF 是一个 javascript 函数。

在 Primefaces 4.0 中,小部件的 Javascript 范围发生了变化。在 4.0 版之前,您可以使用 widgetVar.show(); 打开一个对话框小部件。

在 Primefaces 4.0 及更高版本中,小部件存储在 Javascript 小部件数组中。当您调用 PF('widgetVar') 时,它会在数组中查找小部件并返回它。

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
;

我在这方面找不到太多信息,这也是我使用 Chrome 的开发人员工具能够破译的内容。

【讨论】:

【参考方案2】:

PF 函数是 PrimeFaces 的 JavaScript API 的一部分。它在客户端查找一个 Javascript 对象,该对象是 JSF 组件的主干。这是它的定义(source):

PF = function(widgetVar)       
        var widgetInstance = PrimeFaces.widgets[widgetVar];

        if (!widgetInstance) 
            PrimeFaces.error("Widget for var '" + widgetVar + "' not available!");
        

        return widgetInstance;
    ;

PFPrimeFaces.widgets['someWidgetId']的快捷方式,它只是在全局范围内查找Javascript对象,因此也可以使用window['someWidgetId']检索Javascript对象。

PrimeFaces 的 Javascript API 没有在线官方文档,因此要了解您可以使用 Javascript 对象真正“做什么”,您需要深入了解 PrimeFaces。

另见

"Intro To PrimeFaces widgetVar" blog post PrimeFaces source code

【讨论】:

我不确定这是否会增加 Mark 所说的内容,但我会留给你决定。 Imo 确实如此。更好的参考,因此我的赞成票(使用浏览器开发工具解密一个开源项目;-))但你最好将源的引用更改为 github,因为它们最近移动了【参考方案3】:

对于其他在升级到 4.0 及更高版本时来到这里的 Primefaces 用户,可以绕过使用 PF('yourWidgetVar').someFunction() 的需要,直接使用 yourWidgetVar.someFunction(),就像在版本 4.0 之前一样。您只需要在 web.xml 中进行以下配置:

<context-param>
    <param-name>primefaces.LEGACY_WIDGET_NAMESPACE</param-name>
    <param-value>true</param-value>
</context-param>

来自 Primefaces 用户指南:

启用窗口范围,以便可以使用以下方式访问小部件 widgetVar.method() 除了默认的 PF 命名空间方法,如 PF('widgetVar').method().

显然,创建此功能是为了避免命名空间冲突/污染,但如果您想通过小步骤迁移到新版本并隔离新版本引入的不兼容性,它会很有用。

【讨论】:

太棒了!当我的项目时间紧迫时,这使我免于更新我的整个代码库!谢谢

以上是关于Primefaces 中的 PF 功能有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用p:selectBooleanCheckbox切换禁用/启用PrimeFaces组件

JSF Primefaces TabView 问题

<p:gmap 组件的绑定不起作用 - Primefaces 3.4.1

禁用 jsf/primefaces 中的窗口功能

Primefaces 与 Wildfly 中的 Yasson 有啥关系吗?

PrimeFaces热键始终使用任何键