我有一个名为pageContent.xhtml的ui:composition
,其中包含另一个ui:composition
和一个rich:popupPanel
(两个不同的页面)。
pageContent.xhtml包含a4j:commandButton
。在按钮的oncomplete
方法中,我只想在rich:popupPanel
上显示pageContent.xhtml时才执行javascript。所以如果rich:popupPanel
可用,我想查看pageContent.xhtml。
RichFaces documentation描述rich:component
如果找不到指定的组件标识符,则返回null
。
出于测试原因,我在oncomplete
的{{1}}方法中执行以下JS:
a4j:commandButton
如果弹出窗口显示了pageContent.xhtml(id'popupPanelId'可用),我单击按钮,我在控制台上看到以下结果:
console.log('-> ' + #{rich:component('popupPanelId')});
如果pageContent.xhtml显示在另一个-> BaseComponent, PopupPanel
页面上(id'popupPanelId'不可用)并且我单击按钮,则会收到以下错误消息:
ui:composition
如果try {console.log('-> ' + );;} catch (e) {window.RichFaces.log.error('Error in me...
未找到该组件,则不会将任何内容返回到结果页面而不是#{rich:component('popupPanelId')}
。
如何在没有任何错误的情况下检查组件是否可用?
答案 0 :(得分:1)
在服务器上计算EL表达式,然后将结果转换为要在页面上输出的字符串,将null转换为空字符串。
所以你可以用空检查开始:
jQuery.noConflict()
另一方面,我假设popupPanel是基于某些条件包含的,更好的方法是@oncomplete检查相同的条件。否则,如果它没有被渲染,那么函数就会找到它。