如何检查 rich:component returns 是否为空
How to check if rich:component returns null
我有一个名为 pageContent.xhtml 的 ui:composition
,它包含在另一个 ui:composition
和一个 rich:popupPanel
(两个不同的页面)中。
pageContent.xhtml 包含一个 a4j:commandButton
。在按钮的 oncomplete
方法中,我想仅当 pageContent.xhtml 显示在 rich:popupPanel
上时才执行 javascript。因此,如果 rich:popupPanel
可用,我想检查 pageContent.xhtml。
RichFaces documentation 描述 rich:component
returns 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转为空字符串。
所以您可以从空检查开始:
oncomplete="#{rich:component('popupPanelId') == null ? 'alert(\'not found\')' : 'alert(\'found\')'}"
另一方面,我假设基于某些条件包含 popupPanel,更好的方法是让 @oncomplete 检查相同的条件。否则,如果它没有被渲染,函数会找到它。
我有一个名为 pageContent.xhtml 的 ui:composition
,它包含在另一个 ui:composition
和一个 rich:popupPanel
(两个不同的页面)中。
pageContent.xhtml 包含一个 a4j:commandButton
。在按钮的 oncomplete
方法中,我想仅当 pageContent.xhtml 显示在 rich:popupPanel
上时才执行 javascript。因此,如果 rich:popupPanel
可用,我想检查 pageContent.xhtml。
RichFaces documentation 描述 rich:component
returns 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转为空字符串。
所以您可以从空检查开始:
oncomplete="#{rich:component('popupPanelId') == null ? 'alert(\'not found\')' : 'alert(\'found\')'}"
另一方面,我假设基于某些条件包含 popupPanel,更好的方法是让 @oncomplete 检查相同的条件。否则,如果它没有被渲染,函数会找到它。