在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
分享到:
相关推荐
3. **编辑界面**:在弹出窗口中,我们需要展示与所选行相关联的字段,以便用户进行编辑。这些字段可以是`InputText`, `InputDate`, `SelectOneChoice` 等ADF 输入组件。编辑界面的数据绑定通常会指向后台Bean的属性...
在实际应用中,用户可以通过SPI(串行外设接口)向ADF4351写入控制字,以配置其频率、分频比和其他操作参数。ADF4351通过10个可编程的R计数器和N计数器实现大范围的频率合成能力。而其内置的电荷泵和环路滤波器可以...
**ADF5355**是一款高度集成的频率合成器,设计用于在各种无线通信系统中实现精确且灵活的频率生成。它结合了小数N分频和整数N分频锁相环(PLL)技术,允许用户在宽广的频率范围内进行操作。该器件的特性包括: 1. *...
在学习和应用这些资源时,开发者应该首先熟悉ADF4351的基本工作原理,理解其内部架构,然后通过数据手册确定合适的配置参数。接着,借助驱动代码了解如何与芯片进行通信,并根据需要修改或扩展驱动以满足特定需求。...
ADF41513是Analog Devices公司生产的一种超低噪声频率合成器,它在无线通信系统中用作局部振荡器,用于上变频和下变频部分。它能够提供高达26.5GHz的输出频率,这使得它非常适合于高频率范围的应用,比如无线基础...
总之,ADF4350是一款功能强大、性能卓越的射频合成器,以其宽泛的频率覆盖范围、低相位噪声、灵活的分频模式和数字控制能力,在无线通信技术中扮演着至关重要的角色。无论是对于专业无线电工程师还是电子爱好者来说...
标题中的“宽带PLL ADF41513(1)_ADF_acceptwcc_adf4360_ADF41513_ADf4360-7_”提及了两个关键器件:ADF41513和ADF4360-7。这两个都是高性能的频率合成器,在无线通信、测试设备以及各种信号处理应用中广泛使用。 ...
arcgis java adf 点击地图弹出气泡
标题中的“ADF检验MATLAB程序.zip”指的是一个包含MATLAB代码的压缩文件,用于执行Augmented Dickey-Fuller(ADF)单位根检验。ADF检验是统计学中一种常用的方法,用于判断时间序列数据是否具有单位根,即数据是否...
在STC15L104E扫频.C文件中,该MCU(微控制器)可能被用作控制中心,负责读取和解析用户的输入,生成合适的配置命令,然后通过I/O口控制ADF4351的配置。扫频功能可能是通过改变FTW或分频系数实现的,以连续改变输出...
标题中提到的ADF4159是一款频率合成器,它具备了调制功能和能够快速及慢速产生波形的能力,同时工作在高达13GHz的频率。在描述中指出该器件能够提供次赫兹级别的频率分辨率,利用25位固定模数。ADF4159能够用于多种...
通过阅读手册,用户可以了解到ADF4351的频率设置方法、输出功率等级、相位噪声性能以及如何进行正确的电源管理。 **驱动代码** 在实际应用中,开发者通常需要编写驱动代码来控制ADF4351的工作。这些代码可能基于...
12. 硬件和软件电源关闭模式:ADF41513 具有硬件和软件电源关闭模式,满足了不同应用的需求。 ADF41513 的应用场景包括: 1. 测试设备和仪器:ADF41513 的超低噪频率和高速相位频率检测器使其非常适合测试设备和...
**ADF4351与ADF4350:高性能频率合成器** ADF4351和ADF4350是ADI公司(Analog Devices, Inc.)推出的一系列高性能、高精度频率合成器芯片,广泛应用于无线通信、雷达系统、测试设备以及卫星通信等领域。这两款芯片...
ADF4350是一款由Analog Devices公司生产的高性能频率合成器,支持广泛的无线通信和射频(RF)应用。该芯片的主要特点和应用领域包括: 1. 输出频率范围广:ADF4350可以提供从137.5MHz至4400MHz的输出频率,这使得它...
TaskFlow Dialog是ADF中一个重要的组件,用于创建弹出式对话框,它能够在一个主页面上打开一个新的子任务流程,提供更丰富的用户交互体验。 在创建TaskFlow Dialog的过程中,通常包括以下几个步骤: 1. **创建Task...
用户可以输入目标频率,软件会自动计算出相应的寄存器设置,这些设置将被用于更新ADF4351内部的配置寄存器,以实现所需频率的生成。 "ADF4351_settings.txt"文件则包含了ADF4351的具体配置信息,这些信息可能包括但...
在数字信号处理领域,ADF4355是一款高性能的射频频率合成器,常用于通信系统、测试设备以及各种无线应用。它提供了宽广的频率范围、高精度和灵活的编程能力。本教程将深入探讨如何使用硬件描述语言Verilog对ADF4355...