我的主页面(在ADF 11gR1中构建JSPX),我在其中创建了一个区域中的弹出窗口。在弹出窗口中,我尝试搜索某些ArrayList值,并希望它通过单击按钮将这些ArrayList值发送到Main页面。
我能够通过从弹出Bean调用上下文事件并处理主页面bean中的事件来实现上述要求。这两个bean都在页面流范围内。
主表绑定到MainTableBinding Richtable和Popup绑定到PopPageBinding RichPopup,它们在MainPageBean中定义。
现在在Main页面bean中,如果我试图关闭弹出窗口并通过句柄上下文事件刷新表,我就无法这样做,因为它抛出了空指针错误,弹出绑定和MainTablebinding不存在。任何解决此问题的帮助。
答案 0 :(得分:0)
通常我不喜欢将UI对象绑定到bean,但是在bean中使用JSFUtils来查找组件。如果您没有JSFUtils(和ADFUtils)类,您应该能够通过简单的Web搜索找到它。
然后从主页面bean中你可以执行以下操作:
RichPopup pop = (RichPopup)JSFUtils.findComponentInRoot("popupid");
if (pop != null) {
pop.hide();
}
请注意,在按ID定位组件时,您需要指定区域ID,例如,当主页中有许多区域在每个区域中具有相同的popupid时。例如,使用Chrome“Inspect”获取弹出窗口的ID,其中包含区域ID前缀。
您可以使用类似方法刷新表格:
ADFFacesContext.getCurrentInstance().addPartialTarget(JSFUtils.findComponentInRoot("tableId"));
关键是获取JSFUtils和ADFUtils库的副本,以使这种方法起作用。