我有一个名为pageContent.xhtml的ui:composition
,它包含在另一个ui:composition
和rich:popupPanel
(两个不同的页面)中。
pagcontent .xhtml包含一个a4j:commandButton
。在按钮的oncomplete
方法中,我希望仅当pageContent.xhtml显示在rich:popupPanel
上时才执行javascript。所以我想检查pageContent.xhtml,如果rich:popupPanel
是可用的。
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('popupPanelId')}
没有找到组件,则返回结果页而不是null
。
如何检查组件是否可用而没有任何错误?
在服务器上计算EL表达式,然后将结果转换为要在页面上输出的字符串,将null转换为空字符串。
所以你可以从null检查开始:
oncomplete="#{rich:component('popupPanelId') == null ? 'alert('not found')' : 'alert('found')'}"
另一方面,我假设popupPanel是基于某些条件包含的,更好的方法是让@oncomplete检查相同的条件。否则,如果只是不呈现,函数将找到它。