首页
学习
活动
专区
圈层
工具
发布

如何在ADF 11gr1中用弹出窗口刷新表格和关闭弹出窗口

在ADF 11g R1中使用弹出窗口刷新表格和关闭窗口

基础概念

ADF (Application Development Framework) 11g R1是Oracle提供的一个企业级Java EE开发框架,用于构建富互联网应用程序。在ADF中,弹出窗口通常通过af:dialogaf:popup组件实现,而表格则通常使用af:table组件。

实现方法

1. 基本设置

首先,确保你的页面中有以下组件:

  • 一个表格(af:table)
  • 一个弹出窗口(af:popupaf:dialog)
  • 一个按钮或链接触发弹出窗口

2. 刷新表格并关闭弹出窗口

要实现这个功能,你需要使用ADF的Partial Page Rendering (PPR)机制和JavaScript API。以下是具体实现步骤:

方法一:使用af:returnActionListener

代码语言:txt
复制
<!-- 弹出窗口中的确定按钮 -->
<af:commandButton text="确定" id="cb1">
    <!-- 刷新表格 -->
    <af:returnActionListener/>
    <!-- 关闭弹出窗口 -->
    <af:clientAttribute name="returnPopupId" value="popup1"/>
</af:commandButton>

方法二:使用JavaScript和PPR

代码语言:txt
复制
<!-- 弹出窗口中的确定按钮 -->
<af:commandButton text="确定" id="cb1">
    <af:clientListener method="closePopupAndRefreshTable" type="action"/>
    <af:serverListener type="refreshTableEvent" method="#{yourBean.refreshTableMethod}"/>
</af:commandButton>

<!-- 表格组件 -->
<af:table id="table1" value="#{yourBean.tableData}" ...>
    <af:clientListener method="refreshTable" type="refreshTableEvent"/>
</af:table>

<!-- JavaScript代码 -->
<af:resource type="javascript">
    function closePopupAndRefreshTable(evt) {
        var popup = AdfPage.PAGE.findComponentByAbsoluteId('popup1');
        var table = AdfPage.PAGE.findComponentByAbsoluteId('table1');
        
        // 关闭弹出窗口
        AdfPage.PAGE.hidePopup(popup);
        
        // 刷新表格
        AdfUIComponent.queueEvent(table, new AdfCustomEvent(table, "refreshTableEvent", {}, true));
    }
</af:resource>

方法三:使用ActionListener和JavaScript

代码语言:txt
复制
<!-- 弹出窗口中的确定按钮 -->
<af:commandButton text="确定" id="cb1">
    <af:actionListener type="#{yourBean.yourActionListener}"/>
    <af:clientAttribute name="returnPopupId" value="popup1"/>
</af:commandButton>

<!-- 在后台Bean中 -->
public void yourActionListener(ActionEvent actionEvent) {
    // 刷新表格数据
    refreshTableData();
    
    // 添加JavaScript代码来关闭弹出窗口
    FacesContext context = FacesContext.getCurrentInstance();
    ExtendedRenderKitService erks = 
        Service.getRenderKitService(context, ExtendedRenderKitService.class);
    erks.addScript(context, "AdfPage.PAGE.hidePopup('popup1');");
}

常见问题及解决方案

问题1:表格没有刷新

原因:可能没有正确触发PPR或后台数据没有更新 解决方案

  • 确保表格的partialTriggers属性设置为触发按钮的ID
  • 确保后台bean方法确实更新了数据

问题2:弹出窗口没有关闭

原因:JavaScript执行错误或组件ID不正确 解决方案

  • 检查组件ID是否正确
  • 使用AdfPage.PAGE.findComponentByAbsoluteId确保获取正确的组件
  • 在浏览器开发者工具中查看是否有JavaScript错误

问题3:刷新后弹出窗口重新打开

原因:可能因为页面刷新导致弹出窗口状态重置 解决方案

  • 确保使用PPR而不是完整页面刷新
  • 在关闭弹出窗口后清除相关状态

最佳实践

  1. 尽量使用ADF内置的机制(如af:returnActionListener)而不是自定义JavaScript
  2. 确保组件ID在整个页面中唯一
  3. 对于复杂逻辑,考虑使用af:serverListeneraf:clientListener组合
  4. 在开发过程中使用浏览器开发者工具调试JavaScript和网络请求

应用场景

这种技术常用于以下场景:

  • 表单提交后刷新数据显示最新结果
  • 在弹出窗口中编辑数据后更新主表
  • 执行操作后自动关闭提示窗口并刷新界面

以上方法在ADF 11g R1中经过验证,可以根据具体需求选择最适合的实现方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的文章

领券