Jsf 功能';PF';找不到?

Jsf 功能';PF';找不到?,jsf,primefaces,Jsf,Primefaces,我使用的是JSF 2和Primefaces 5,我试图在对象“client”为null(未实例化)时显示p:dialog,如下所示: <p:commandLink update=":form:connecterPanel" oncomplete="#{empty loginBean.client ? PF('connectDialog').show():''}" title="add to panel"> <h:outputText styleClass="ui-

我使用的是JSF 2和Primefaces 5,我试图在对象“client”为null(未实例化)时显示p:dialog,如下所示:

<p:commandLink update=":form:connecterPanel" 
   oncomplete="#{empty loginBean.client ? PF('connectDialog').show():''}" title="add to panel">
   <h:outputText styleClass="ui-icon ui-icon-cart" style="margin:0 auto;" />
</p:commandLink>


但是我得到的错误是未找到函数“PF”

我使用以下方法解决了它:

oncomplete="if(#{empty loginBean.client }){PF('connectDialog').show()}"

快速想一想:
empty
在EL表达式中是个婊子。我经常遇到类似的问题,原因是缺少括号。请尝试
(empty loginBean.c)
。我仍然收到相同的错误!真奇怪。你100%确定这是你唯一改变的事情吗?@Kukeltje是的,这是我唯一改变的事情,我从这里得到了答案,Omfg,没有看到明显的:-)是的,ofc
PF()
是一个javascript方法,而el表达式本身并不知道javascript方法。因此,在您的第一段代码中,java搜索了一个方法“PF()”,这是错误的。因此,什么也应该起作用:在EL表达式中,将函数调用打印为“字符串”,在html生成后,它将是有效的Java脚本:
oncomplete=“{empty loginBean.client?\”PF('connectDialog').show()\”:“}
(不确定转义)计算为
”oncomplete=“PF('connectDialog').show()”
oncomplete=“”
取决于条件。A,我记得:在EL中,连接字符串对于concat来说是一件可怕的事情,请参见此处:-因此,您的方法显然是“好”的,即使生成的html
oncomplete=“if(true){PF('connectDialog').show()”
看起来很奇怪,如果有人检查源代码:-)另一种方法是在bean方法中生成javascript字符串,并像
oncomplete=“#{loginBean.onCompleteJavascript}”
with
公共字符串getOnCompleteJavascript(){if(!this.client.isEmpty())返回“PF('connectDialog').show()”;}