Javascript 如何检查rich:component是否返回null

Javascript 如何检查rich:component是否返回null,javascript,jsf,richfaces,Javascript,Jsf,Richfaces,我有一个名为pageContent.xhtml的ui:composition,它包含在另一个ui:composition中,还有一个rich:popupanel(两个不同的页面) pageContent.xhtml包含一个a4j:commandButton。在按钮的oncomplete方法中,我只想在rich:popupanel上显示pageContent.xhtml时执行javascript。因此,如果rich:popupanel可用,我想签入pageContent.xhtml RichFac

我有一个名为pageContent.xhtml的
ui:composition
,它包含在另一个
ui:composition
中,还有一个
rich:popupanel
(两个不同的页面)

pageContent.xhtml包含一个
a4j:commandButton
。在按钮的
oncomplete
方法中,我只想在
rich:popupanel
上显示pageContent.xhtml时执行javascript。因此,如果
rich:popupanel
可用,我想签入pageContent.xhtml

RichFaces描述,如果未找到指定的组件标识符,则
rich:component
返回
null

出于测试原因,我在
a4j:commandButton
oncomplete
方法中执行以下JS:

console.log('-> ' + #{rich:component('popupPanelId')});
如果弹出窗口上显示pageContent.xhtml(id“popupPanelId”可用),并且我单击按钮,我会在控制台上看到以下结果:

-> BaseComponent, PopupPanel
如果pageContent.xhtml显示在另一个
ui:composition
页面上(id“popupPanelId”不可用),并且我单击该按钮,我会收到以下错误消息:

try {console.log('-> ' + );;} catch (e) {window.RichFaces.log.error('Error in me...
如果
#{rich:component('popupanelid')}
未找到该组件,则不会将任何内容返回到结果页面,而不是
null


如何检查组件是否可用且没有任何错误?

在服务器上计算EL表达式,然后将结果转换为要在页面上输出的字符串,将null转换为空字符串

因此,您可以从空检查开始:

oncomplete="#{rich:component('popupPanelId') == null ? 'alert(\'not found\')' : 'alert(\'found\')'}"
另一方面,我假设popupPanel是基于某些条件包含的,更好的方法是@oncomplete检查相同的条件。否则,如果只是没有呈现,函数将找到它