通过函数式编程实现动态对话框处理程序

在我以前的文章中,我提到了一个常见的用例,当我们需要以编程方式检查当前事务是否脏了,并在做某件事之前通知用户有关该事务的信息。 就像“您有未保存的更改将丢失,要继续吗?”。

假设我们需要在应用程序的许多位置,从一个视图导航到另一个视图,单击“搜索”按钮,调用业务服务方法等时通知用户有关交易不正常的情况。因此,在每种情况下,我们都需要做在用户确认他们要继续之后的其他事情。 这意味着我们的对话侦听器应该以某种方式知道它的全部内容以及下一步要做什么。

解决方案可以是向af:dialog组件添加自定义属性,该自定义属性指向当用户在对话框中单击“是”时将要调用的函数:

<af:popup id="pDirtyTransaction" contentDelivery="lazyUncached"><af:dialog title="Warning" type="yesNo" closeIconVisible="false"id="dDirtyTransaction"dialogListener="#{theBean.dirtyTransactionDialogListener}"><af:outputText value="You have unsaved changes, do you want to continue?"id="ot1"/><f:attribute name="dialogHandler" value=""/>                   </af:dialog>
</af:popup>

在这种情况下,对话框侦听器可能如下所示:

public void dirtyTransactionDialogListener(DialogEvent dialogEvent) {       Map attrs = dialogEvent.getComponent().getAttributes();Consumer<Boolean> dialogHandler = (Consumer) attrs.get("dialogHandler");if (dialogHandler != null) {dialogHandler.accept(dialogEvent.getOutcome() == DialogEvent.Outcome.yes);attrs.put("dialogHandler",null);}                   
}

我们在这里期望dialogHandler属性指向实现Consumer功能接口的对象。

我们的utils中有一个方法显示带有对话框的弹出窗口:

public static void showDirtyTransactionPopup(Consumer dialogHandler) {if (dialogHandler != null) {JSFUtil.findComponent("dDirtyTransaction").getAttributes().put("dialogHandler",dialogHandler);}RichPopup popup =(RichPopup) JSFUtil.findComponent("pDirtyTransaction");popup.show(new RichPopup.PopupHints());
}

让我们在一个简单的场景中使用这种方法。 我们的任务流View1View2中有两个视图活动。 用户单击按钮以从一个视图导航到另一个视图。 导航时,我们需要检查当前事务是否肮脏以及是否询问用户是否要继续。 我们可以利用Java 8 Lambda表达式的功能并实现按钮动作侦听器,如下所示:

public void buttonActionListener(ActionEvent actionEvent) {if (Utils.isTransactionDirty()) {       Utils.showDirtyTransactionPopup((yesOutcome) -> {          //the code below will be invoked by the dialog listener//when the user clicks a button on the dialog                                                                     if ((Boolean) yesOutcome) {//the user has agreed to proceed,//so let's rollback the current transactionUtils.getCurrentRootDataControl().rollbackTransaction();            //and queue an action event for this button againnew ActionEvent(actionEvent.getComponent()).queue();} });} else//just navigate to View2Utils.handleNavigation("goView2");
}

基于此技术,我们可以实现一个声明性组件,用作具有动态内容和动态处理程序的对话框。

而已!

翻译自: https://www.javacodegeeks.com/2017/11/implementing-dynamic-dialog-handler-functional-programming.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字通信系统的组成框图

通信系统组成框图有两种&#xff0c;一种较为简略&#xff0c;为广义上的通信系统&#xff1b;一种比较全面&#xff0c;为数字通信系统&#xff0c;现整理如下&#xff1a; 简略版&#xff1a; 信源→发送设备→信道→接收设备→信宿信源\rightarrow 发送设备\rightarrow 信道…

哨兵一号数据snap预处理_利用SNAP软件进行Sentinel-1A卫星微波影像的预处理

利用SNAP软件对雷达影像进行预处理&#xff0c;主要包括热噪声去除、轨道文件校正、辐射定标、滤波校正、多普勒地形校正&#xff0c;最终获得入射角和后向散射信息。数据&#xff1a;本次实验所用数据为哨兵一号(Sentinel-1A)干涉宽幅模式(Interferometric Wideswath&#xff…

Spring Boot&Angular 5&Spring Data&Rest示例(CRUD)

本教程提供了Spring Boot&#xff0c;Angular 5和spring数据的完整实现&#xff0c;以示例为例构建端到端的单页Java Web应用程序。我们将使用Spring Boot 1.5公开REST API和angular5并通过路由来构建我们的客户端不仅要消耗服务器公开的API&#xff0c;还要将MySql数据库与后端…

信号与系统 chapter12 卷积及其性质

卷积的概念 卷积算得上是信号与系统里面一个比较抽象的概念&#xff0c;它广泛应用在统计学、工程学&#xff0c;好多人明白了怎么做题&#xff0c;却仍然说不清楚卷积的概念&#xff0c;我们把它当作一种运算&#xff0c;它的运算形式如下&#xff1a; 有f1(t)f2(t)f_1(t)f_2…

第二章导数与微分思维导图_线性代数第二章 矩阵 思维导图

这章内容复习集中在两方面&#xff1a;矩阵乘法&#xff1b;可逆矩阵及相关内容&#xff08;矩阵方程和伴随矩阵&#xff09;。可逆矩阵是全课程的一个关键性概念&#xff0c;与各章内容都有联系&#xff0c;应着重注意这些联系。

图像的常用压缩技术以及视频码率的计算

图像压缩方法&#xff1a; 冗余度压缩方法&#xff1a;也称无损压缩&#xff0c;压缩比较低信息量压缩方法&#xff1a;有损压缩&#xff0c;多用在数字电视技术与静止图像通信&#xff0c;压缩编码中丢弃了一些没有作用的信息 压缩种类压缩方法无损压缩哈夫曼编码&#xff0…

框架优点_铝型材框架相比其他框架的优点

很多自动化技术机械厂都是应用到工业铝型材框架做为设备的支撑点件&#xff0c;还会继续有一些顾客会有疑问&#xff0c;用铁或是是其他的原材料来做框架能不能&#xff1f;当然是能够 的&#xff0c;但是为什么有生产厂家把原来其他原材料换为工业铝型材框架来应用呢&#xff…

使用Maven进行Selenium测试自动化

今天&#xff0c;我想帮助您更好地管理自动GUI测试&#xff08;Selenium&#xff09;。 在过去&#xff0c;我已经看到人们处理此问题的许多不同方式。 有些人只是用Selenium-IDE编写普通HTML TestCases&#xff0c;将其存储在HDD上的某个位置&#xff0c;并在需要时手动运行。…

2018年工业机器人销量排位_长安-2018年11月汽车销量 细分销量

根据盖世汽车社区-销量数据库查询&#xff0c;为广大汽车行业人士整理了长安-2018年11月细分销量(按变速箱)数据如下:变速箱类型九月十月十一月累计4AT[TS-40/Ss-II]4,6554,0545,34814,0575AMT[AF512]11711202295DCT[DF515]56955139915195MT[MF510]2,34298475040765MT[MF515/TM…

OFDM技术及其应用

OFDM简介 OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术&#xff0c;实际上OFDM是MCM(Multi Carrier Modulation)&#xff0c;多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰弱的能力&#xff0c;能够支持多用户接入…

Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

在了解Spring框架中Repository Component &#xff0c; Service Controller &#xff0c; Repository Controller和Repository批注之间的区别之前&#xff0c;了解Component批注在Spring中的作用很重要。 在Spring的初始发行期间&#xff0c;所有bean都用于在XML文件中声明。 对…

信号与系统 chapter13 阶跃响应的定义与求法

定义 阶跃响应是阶跃函数ξ(t)\xi(t)ξ(t)所引起的***零状态响应&#xff0c;***记为g(t)g(t)g(t) 这玩意的求法与咱们前面画信号与系统框图那一部分有异曲同工之妙信号与系统chapter8 有两种方法 经典法 利用单位阶跃函数与单位冲激响应之间的关系 看一道例题&#xff1a…

语音识别插件_2D动画唇动合成,根据语音自动生成动画人物口型

蕾师师 发自 凹非寺量子位 报道 | 公众号 QbitAI只需要输入一段语音&#xff0c;代码会自动生成与之相对的动画唇形。还是毫无违和感的那种。这是一个在GitHub上拥有501星的开源项目&#xff0c;叫做Rhubarb Lip Sync。它既可以是Windows和OS X命令行工具&#xff0c;也可以作为…

位同步技术中的比相法

什么是比相法&#xff1f;与滤波法相比有什么区别&#xff1f; 滤波法与比相法都是位同步技术中的直接法。滤波法是对接收到的数字信号进行变换处理&#xff0c;经过变换处理的数字信号中含有位定时分量&#xff0c;再通过窄带滤波器提取该分量&#xff0c;从而实现位同步&…

安装指定版本pytorch_Ubuntu16.04安装pytorch(七)

Ubuntu16.04自带python 2.7.12 和python 3.5.2&#xff0c;不需要自己装python第一步&#xff1a;安装pip3sudo apt-get install python3-pip顺便安装numpypip3 install numpy第二步&#xff1a;配置pip使用的镜像源---------------------------------------------------------…

weblogic jmx_在WebLogic Server上驯服JMX

weblogic jmx让我们先假设几件事&#xff1a; 我假设您听说过Java的JMX功能并熟悉它的功能&#xff08;远程公开和管理您的服务&#xff09;。 您应该知道默认的JVM将具有一个可以注册MBean的Platform MBeanServer实例。 您可以使用JDK中的jconsole命令查看它们。 到目前为止…

基于锁相环的定时误差调整

VCO数字实现方法 可变分频法&#xff1a;使用一个高速率时钟作为抽样参考时钟&#xff0c;通过一个计数器对这个高速率时钟进行分频N\div NN&#xff0c;通过改变分频比实现控制特定的速率 抽样时钟超前&#xff1a;N→N1N\rightarrow N1N→N1分的更多 抽样时钟滞后&#xff1a…

后怎么恢复_爬山后小腿肌肉酸痛怎么办 ?这样来恢复!|新生活公社

爬山后小腿肌肉酸痛怎么办 &#xff1f;这样来恢复&#xff01;在爬山之后腿疼的话可以用热敷、按摩、泡脚、拉伸等等方法来帮助自己恢复&#xff0c;爬山之后腿疼是正常的现象&#xff0c;我们在爬山之后要及时拉伸。爬山后小腿肌肉酸痛怎么办1热敷这是很有效的又简单的方法&a…

Java 9 JShell示例:集合静态工厂方法

这篇文章继续了My My Java 9 Features博客文章中对Java9功能的探索。 在这里&#xff0c;我们在List&#xff0c;Set和Map接口中试验Java9 Collections静态工厂方法。 集合静态工厂方法 Java9使用其新的静态工厂方法使创建不可变列表更加容易 有12种Set.of和List.of方法– L…

java实现次方的运算_Java中对于位运算的优化以及运用与思考

引言随着JDK的发展以及JIT的不断优化&#xff0c;我们很多时候都可以写读起来易读但是看上去性能不高的代码了&#xff0c;编译器会帮我们优化代码。之前大学里面学单片机的时候&#xff0c;由于内存以及处理器性能都极其有限(可能很多时候考虑内存的限制优先于处理器)&#xf…