2016-12-21 109 views
0

我已在其中创建弹出窗口并在区域中的主页面(JSPX在ADF 11gR1中生成)。在弹出窗口中,我试图搜索某些值的ArrayList,并希望它通过单击按钮将这些ArrayList值发送到主页面。如何在主页面中刷新表格并在弹出窗口中关闭ADF 11gr1中的弹出窗口

我能够通过从弹出的Bean中调用上下文事件并处理主页中的事件来实现上述要求。这两个bean都处于页面流范围内。

主表绑定到MainTableBinding Richtable和Popup绑定到在MainPageBean中定义的PopupBinding RichPopup。

现在在主页面bean如果我试图关闭弹出窗口并通过句柄上下文事件刷新表,我无法做到这一点,因为它是抛出空指针错误,弹出绑定和MainTablebinding做不存在。任何帮助解决这个问题。

回答

0

通常我不喜欢将UI对象绑定到bean,但在bean中使用JSFUtils来查找组件。如果你没有JSFUtils(和ADFUtils)类,你应该可以通过简单的网页搜索找到它。

然后从主网页豆你可以这样做:

RichPopup pop = (RichPopup)JSFUtils.findComponentInRoot("popupid"); 
if (pop != null) { 
    pop.hide(); 
} 

注意有些情况下,你的定位是通过ID组件时需要指定域ID,以及情况下,例如当你有许多地区在主页面中,每个区域都有相同的弹出窗口。例如,使用Chrome“Inspect”来获取将包含区域ID前缀的弹出窗口的ID。

您可以使用类似的方法刷新表:

ADFFacesContext.getCurrentInstance().addPartialTarget(JSFUtils.findComponentInRoot("tableId")); 

的关键是让JSFUtils和ADFUtils库的副本这种方式来工作。

+0

我可以关闭弹出窗口,但由于某种原因主表不会刷新所有...我可以看到该组件被发现..但没有运气:( –

+0

尝试获得句柄迭代器,并重新执行查询和/或刷新迭代器,然后使用上面的代码刷新组件 – 32U

+0

迭代器是由bean数据控制创建的。试图通过重新执行和添加部分触发器来刷新所有手段。 。但没有任何工作......它只是刷新,我可以看到新的bean值通过检查bean的大小得到更新..但表仍然保持原样.... –

相关问题