`

ADF中,当用户关闭编辑窗口时,如何弹出确认窗口

阅读更多

ADF中,可以在弹出窗口(af:popup)上添加表单来编辑数据。用户可以点击弹出窗口右上角的关闭按钮,来关闭弹出窗口。但是当用户希望在关闭按钮前弹出一个确认窗口,用户可以选择Yes或者No,来决定是否停留在当前的页面时,该如何实现呢?因为在ADF中,当用户点击了关闭按钮之后,弹出窗口是在客户端关闭完之才分发给服务端,因此即使在服务端添加了显示确认窗口的代码后,因为原来的父窗口已经关闭了,所以不能满足需求。所以虽然这是个简单的需求,我们需要做一些特殊的处理。

 

直观的有下面的两个思路。

思路一:

1.  给父窗口添加PopupCanceledEvent的服务端监听器,首先获得父窗口的对象将它显示出来,然后获得确认窗口的对象将它显示出来。

2.  给确认窗口添加服务端的DialogEvent的监听器,当用户选择Yes时候,关闭父窗口;否则停留在父窗口。

给编辑窗口添加服务端PopupCanceledEvent监听器:

<af:popup id="p2" binding="#{UserManagedBean.userPopup}"
     popupCanceledListener="#{UserManagedBean.popupCancelListener}">
    <af:panelWindow
         id="pw4" title="Edit User" modal="true">
        <f:subview id="userSubview ">
            <jsp:include page="/pages/editUser.jsff"/>
        </f:subview>
    </af:panelWindow>
</af:popup>

 

监听器Java代码:

public void popupCancelListener(PopupCanceledEvent popupCanceledEvent) {
       RichPopup userPop = (RichPopup)popupCanceledEvent.getComponent();
       userPop.show(new RichPopup.PopupHints());
       getCloseConfirmPopup().show(new RichPopup.PopupHints());
}

 

很不幸,这个思路在大多数情况下是不可行的。因为编辑窗口上定义的控件大多数都是非autoSubmit的。而ADF对于PopupCanceledEvent这一类型的事件是不会更新Model层的数据的。因此虽然我们通过代码又打开了已经关闭编辑窗口,但是在生成请求响应时(包括新的编辑窗口html代码,对应的javascript对象,以及将二者绑定到一起的javascript代码等),会使用当前的Model层的数据,显然最终导致了用户输入的数据的丢失(除非控件是autoSubmit的,因为此时Model层在控件值发生变化的时候已经被ADF框架更新了)。这个显然是不符合需求的。

 

思路二:

1. 给父窗口添加popupCanceled客户端监听器,首先获得父窗口的对象将它显示出来,然后获取确认窗口的对象将它显示出来,最后取消popupCanceled事件的传递。

2.  给确认窗口添加服务端的DialogEvent的监听器,当用户选择Yes时候,关闭父窗口;否则停留在父窗口。

给编辑窗口添加客户端popupCanceled监听器:

<af:popup id="p2" binding="#{UserManagedBean.userPopup}"
    <af:clientListener type="popupCanceled" method="onCloseConfirmPopup"/>
    <af:panelWindow id="pw4" title="Edit User" modal="true">
        <f:subview id="userSubview">
            <jsp:include page="/pages/editUser.jsff"/>
        </f:subview>
    </af:panelWindow>
</af:popup>

 

监听器Javascript代码:

function onCloseConfirmPopup(evt){
    var eventSource = evt.getSource();
    eventSource.show();
   
    //the confirm popup is defined in editUser.jsff file.
    var confirmPop =
    AdfPage.PAGE.findComponentByAbsoluteId("userSubview:confirmPopup");
    confirmPop.show();
    evt.cancel();
}

此思路将显示确认窗口的代码移动到了客户端,因此有效的避免了因为PopupCanceledEvent向服务器端分发而导致的用户数据的丢失问题。因此此思路是可行的。

 

确认窗口的服务端DialogEvent的监听器:

public void closeConfirmPopListener(DialogEvent dialogEvent) {
    if (Outcome.no.equals(dialogEvent.getOutcome())) {
        return;
    }
        
    findUserPopup().hide();
}

 

相关的几个文档链接:

Working with popups in ADF

Handling the af:dialog Ok and CANCEL buttons

 

 

0
0
分享到:
评论

相关推荐

    ADF Table popup弹出编辑和添加

    3. **编辑界面**:在弹出窗口中,我们需要展示与所选行相关联的字段,以便用户进行编辑。这些字段可以是`InputText`, `InputDate`, `SelectOneChoice` 等ADF 输入组件。编辑界面的数据绑定通常会指向后台Bean的属性...

    ADF4351中文数据手册

    在实际应用中,用户可以通过SPI(串行外设接口)向ADF4351写入控制字,以配置其频率、分频比和其他操作参数。ADF4351通过10个可编程的R计数器和N计数器实现大范围的频率合成能力。而其内置的电荷泵和环路滤波器可以...

    ADF5355中文数据手册

    **ADF5355**是一款高度集成的频率合成器,设计用于在各种无线通信系统中实现精确且灵活的频率生成。它结合了小数N分频和整数N分频锁相环(PLL)技术,允许用户在宽广的频率范围内进行操作。该器件的特性包括: 1. *...

    adf4351的驱动代码、中文数据手册、相关论文讲解,adf4350中文手册,C,C++

    在学习和应用这些资源时,开发者应该首先熟悉ADF4351的基本工作原理,理解其内部架构,然后通过数据手册确定合适的配置参数。接着,借助驱动代码了解如何与芯片进行通信,并根据需要修改或扩展驱动以满足特定需求。...

    ADF41513中文数据手册

    ADF41513是Analog Devices公司生产的一种超低噪声频率合成器,它在无线通信系统中用作局部振荡器,用于上变频和下变频部分。它能够提供高达26.5GHz的输出频率,这使得它非常适合于高频率范围的应用,比如无线基础...

    ADF4350中文资料

    总之,ADF4350是一款功能强大、性能卓越的射频合成器,以其宽泛的频率覆盖范围、低相位噪声、灵活的分频模式和数字控制能力,在无线通信技术中扮演着至关重要的角色。无论是对于专业无线电工程师还是电子爱好者来说...

    宽带PLL ADF41513(1)_ADF_acceptwcc_adf4360_ADF41513_ADf4360-7_

    标题中的“宽带PLL ADF41513(1)_ADF_acceptwcc_adf4360_ADF41513_ADf4360-7_”提及了两个关键器件:ADF41513和ADF4360-7。这两个都是高性能的频率合成器,在无线通信、测试设备以及各种信号处理应用中广泛使用。 ...

    点击地图弹出气泡的问题(arcgis java adf) part 2

    arcgis java adf 点击地图弹出气泡

    ADF检验MATLAB程序.zip_ADF单位根检验_ADF检测_MATLAB adf_adftest matlab_adf检验

    标题中的“ADF检验MATLAB程序.zip”指的是一个包含MATLAB代码的压缩文件,用于执行Augmented Dickey-Fuller(ADF)单位根检验。ADF检验是统计学中一种常用的方法,用于判断时间序列数据是否具有单位根,即数据是否...

    ADF4351配置程序.zip_ADF4351_ADF4351程式_adf4350配置_adf4351 程序_adf4351配置

    在STC15L104E扫频.C文件中,该MCU(微控制器)可能被用作控制中心,负责读取和解析用户的输入,生成合适的配置命令,然后通过I/O口控制ADF4351的配置。扫频功能可能是通过改变FTW或分频系数实现的,以连续改变输出...

    ADF4159中文资料

    标题中提到的ADF4159是一款频率合成器,它具备了调制功能和能够快速及慢速产生波形的能力,同时工作在高达13GHz的频率。在描述中指出该器件能够提供次赫兹级别的频率分辨率,利用25位固定模数。ADF4159能够用于多种...

    adf4351的驱动代码、中文数据手册、相关论文讲解_论文讲解_adf4351中文手册_ADF4351驱动代码_ADF4351_

    通过阅读手册,用户可以了解到ADF4351的频率设置方法、输出功率等级、相位噪声性能以及如何进行正确的电源管理。 **驱动代码** 在实际应用中,开发者通常需要编写驱动代码来控制ADF4351的工作。这些代码可能基于...

    ADF41513 数据手册.PDF

    12. 硬件和软件电源关闭模式:ADF41513 具有硬件和软件电源关闭模式,满足了不同应用的需求。 ADF41513 的应用场景包括: 1. 测试设备和仪器:ADF41513 的超低噪频率和高速相位频率检测器使其非常适合测试设备和...

    ADF4351,4350中文手册,英文手册,数值计算工具

    **ADF4351与ADF4350:高性能频率合成器** ADF4351和ADF4350是ADI公司(Analog Devices, Inc.)推出的一系列高性能、高精度频率合成器芯片,广泛应用于无线通信、雷达系统、测试设备以及卫星通信等领域。这两款芯片...

    ADF4350中文datasheet

    ADF4350是一款由Analog Devices公司生产的高性能频率合成器,支持广泛的无线通信和射频(RF)应用。该芯片的主要特点和应用领域包括: 1. 输出频率范围广:ADF4350可以提供从137.5MHz至4400MHz的输出频率,这使得它...

    ADF TaskFlow Dialog

    TaskFlow Dialog是ADF中一个重要的组件,用于创建弹出式对话框,它能够在一个主页面上打开一个新的子任务流程,提供更丰富的用户交互体验。 在创建TaskFlow Dialog的过程中,通常包括以下几个步骤: 1. **创建Task...

    adf4351配置模板及配置软件

    用户可以输入目标频率,软件会自动计算出相应的寄存器设置,这些设置将被用于更新ADF4351内部的配置寄存器,以实现所需频率的生成。 "ADF4351_settings.txt"文件则包含了ADF4351的具体配置信息,这些信息可能包括但...

    verilog配置ADF4355

    在数字信号处理领域,ADF4355是一款高性能的射频频率合成器,常用于通信系统、测试设备以及各种无线应用。它提供了宽广的频率范围、高精度和灵活的编程能力。本教程将深入探讨如何使用硬件描述语言Verilog对ADF4355...

Global site tag (gtag.js) - Google Analytics