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

对话框 函数

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

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

解决方案可能是向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/334574.shtml

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

相关文章

Linux 命令之 yum -- 基于 RPM 的软件包管理器

文章目录一、命令介绍二、选项参数选项参数三、配置文件四、参考示例&#xff08;一&#xff09;安装、升级和删除包安装指定的软件包强制重新安装本地安装指定软件包本地更新指定软件包安装 yum 服务器中的所有可安装的软件安装程序组&#xff08;软件组&#xff09;安装 yum …

adb 最大连接_手机触屏失效的抢救办法,以及如何利用adb实现PC与手机交互

手机进水或者摔坏屏幕导致触屏失效的时候&#xff0c;一般情况下&#xff0c;要么选择换屏&#xff0c;要么选择把手机扔掉。但其实如果有一根OTG线&#xff0c;手机中的资料还可以安全备份出来&#xff0c;或者还可以再利用起来&#xff0c;发挥一下余热做点别的事。像上图一样…

proxy跨域不生效_前端开发:深入使用proxy代理解决跨域问题

在前端领域里面&#xff0c;跨域指的是浏览器允许向服务器发送跨域请求&#xff0c;进而克服Ajax只能同源使用的局限性限制。同源策略是一种约定&#xff0c;而且是浏览器中最基本也是最核心的安全功能&#xff0c;若缺少了该策略&#xff0c;浏览器非常容易被***&#xff1b;同…

java 静态缓存示例_Java 9 JShell示例:集合静态工厂方法

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

mysql在计算机管理中的路径怎么修改_称重软件中的数据修改怎么知晓?

称重软件称重软件应客户需求&#xff0c;数据允许修改&#xff0c;但不允许删除只能作废。如果数据已修改&#xff0c;该如何知晓该数据是修改过的呢&#xff0c;这就用到了标记。用户修改数据时为保证数据的可追溯性&#xff0c;同样在数据安全方面也有相应的要求&#xff0c;…

pip安装mysql模块_使用pip安装mysql模块for python

我正在尝试使用pip安装mysql模块for python&#xff0c;但遇到了一个错误&#xff1a;mysqlclient.lib(typelib.obj) : error LNK2001: unresolved external symbol __iob_funcmysqlclient.lib(viosslfactories.obj) : error LNK2001: unresolved external symbol __iob_funcmy…

Linux 命令之 apt-get -- APT 软件包管理工具

文章目录 一、命令介绍二、语法格式三、相关文件及目录四、常用命令(一)下载、安装、升级和删除软件包(二)查询和检验软件包(三)执行其它功能五、常用选项(一)安装、升级和删除软件包(二)查询和检验软件包(三)执行其它功能六、参考示例(一)下载、安装、升级和删除…

spring health_为什么Spring的Health会再次向下,向下,向上,向上,向上和向下?...

spring health为什么 我们新JavaScript客户端应用程序会定期调用Grails后端的/health端点&#xff0c;以确定离线状态。 事情开始变得“​​有趣”。 我们免费获得该端点&#xff0c;因为Grails基于Spring Boot&#xff0c;而Spring Boot带有一个名为Spring Boot Actuator的子…

使用JDBC连接数据库(MySQL)的源代码

文章目录JDBC 访问数据库的步骤使用 JDBC 访问数据库的演示代码使用 PreparedStatement 对象查询插入更新删除使用 Statement 对象查询删除JDBC 访问数据库的步骤 将 jdbc 驱劢程序相关的 jar 包 copy 到 WEB-INF/lib 下在 servlet 代码当中&#xff0c;使用 jdbc 访问数据库&…

popupwindow 不抢夺焦点_央视专访“上个厕所就要3000块”的亲历者, 被“坑”的不愉快经历...

资讯 聚焦 活动 宣传 推广 品牌 热文 找小编合作加个人微信2871001801百度百科&#xff1a;宁河于雍正九年(1731年)从宝坻县分出,据《河北省县名考原》称:“蓟运河纵贯县境,时多水患,故县以宁河名”!当然还有另外别的解释!民国三年(1914年)属直隶省津海道,民国十七年(1928年…

gitlab10.x迁移_1.x到2.x的迁移:可观察与可观察:RxJava FAQ

gitlab10.x迁移标题不是错误。 rx.Observable 1.x的io.reactivex.Observable与2.x的io.reactivex.Observable完全不同。 盲目升级rx依赖关系并重命名项目中的所有导入将进行编译&#xff08;稍作更改&#xff09;&#xff0c;但不能保证相同的行为。 在项目的早期&#xff0c; …

ubuntu安装与配置mysql_ubuntu下mysql的安装与配置

安装MySQL sudo apt-get install mysql-server 这个应该很简单了&#xff0c;而且我觉得大家在安装方面也没什么太大题目&#xff0c;所以也就未几说了&#xff0c;下面我们来讲讲配置。 配置MySQL 留意&#xff0c;在Ubuntu下MySQL缺省是只安装MySQLsudo apt-get install mysq…

Servlet 处理多种请求应用

一个 Servlet 如何处理多种请求? 1.使用后缀匹配模式 2.在 service 方法中获取请求资源路径&#xff0c;分析资源路径来决定作何处理 示例代码如下&#xff1a; package priv.lwx.javaex.web_demo_02.web.servlet;import javax.servlet.http.HttpServlet; import javax.serv…

小程序搜索框_微信小程序搜索及优化相关知识科普

生活中我们常常会用到微信小程序&#xff0c;但很多人不知道该如何搜索、找到小程序&#xff1b;而有些已经做了自己的小程序的商家&#xff0c;也不懂怎么提升自己的微信小程序搜索效果。所以下面就跟大家科普下这两个问题。1.怎么搜索微信小程序打开微信&#xff0c;点击右上…

java 函数式编程 示例_功能Java示例 第1部分–从命令式到声明式

java 函数式编程 示例功能编程&#xff08;FP&#xff09;的目的是避免重新分配变量&#xff0c;避免可变的数据结构&#xff0c;避免状态并全程支持函数。 如果将功能性技术应用于日常Java代码&#xff0c;我们可以从FP中学到什么&#xff1f; 在这个名为“ Functional Java …

su联合推拉插件_[实习小记一一SU建模]

鉴于本菜鸡在实习阶段一直在SU建模&#xff0c;那就讲讲我在SU建模的心路历程吧。本菜鸡之前还是SU小白时(俗称白斩鸡&#xff0c;并且现在也很白)&#xff0c;只会死命地用推拉。来到公司初探SU,第一个高层建筑便花费我半个月的时间(我突然想起有一篇日记特别好笑我是个SU人&a…

Linux 命令之 tar 命令-打包和备份的归档工具(附压缩/解压工具)

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;对指定的目录进行打包&#xff08;即备份归档&#xff09;&#xff0c;不压缩&#xff08;二&#xff09;对指定目录下的内容&#xff08;不含目录本身&#xff09;进行打包&#xff08;即…

纹理和基元_通过粘性仙人掌基元进行延迟加载和缓存

纹理和基元您显然知道什么是延迟加载 &#xff0c;对吗&#xff1f; 而且您无疑知道缓存 。 据我所知&#xff0c;Java中没有一种优雅的方法来实现它们中的任何一个。 这是我在Cactoos原语的帮助下为自己找到的。 Matteo Garrone的《 Reality》&#xff08;2012年&#xff09;…

oracle 造数据脚本_Oracle数据库shell脚本--统计所有数据库用户信息及明细

概述今天主要分享一下两个shell脚本&#xff0c;主要是为了查看所有数据库用户及其表空间&#xff0c;统计某个指定用户的明细&#xff0c;下面一起来看看吧~数据库连接脚本use script settdb.sh for DB login details registry#!/bin/bashtmp_username$SH_USERNAMEtmp_passwor…

学维修电脑要多久_学厨师要多久才出师

学厨师一般要学多久&#xff1f;以苏州新东方学厨师为例&#xff1a;厨师培训可以分为长期、短期。中餐、西餐、西点长期专业学习时间1-3年不等&#xff1b;短期专业从7天到8个月不等&#xff0c;主要是按学习内容来划分&#xff0c;比如学苏式汤面&#xff0c;只需要半个月左右…