对话框 函数

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

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

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

对话框 函数

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

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

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

  2. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数

    1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...

  3. random函数用法_Python函数式编程:从入门到走火入魔

    很多人都在谈论函数式编程(Functional Programming),只是很多人站在不同的角度看到的是完全不一样的风景.坚持实用主义的 Python 老司机们对待 FP 的态度应该更加包容,虽然他 ...

  4. java函数式编程_说说函数式编程的那些事

    今天这篇文章我们主要来聊聊函数式编程的思想. 函数式编程有用吗? 什么是函数式编程? 函数式编程的优点. 总所周知 JavaScript 是一种拥有很多共享状态的动态语言,慢慢的,代码就会积累足够的复 ...

  5. python函数编程实战_(转)函数式编程实战教程(Python版)

    许多函数式文章讲述的是组合,流水线和高阶函数这样的抽象函数式技术.本文不同,它展示了人们每天编写的命令式,非函数式代码示例,以及将这些示例转换为函数式风格. 文章的第一部分将一些短小的数据转换循环重写 ...

  6. 函数式编程和面向对象式编程_比较函数式编程,命令式编程和面向对象的编程

    函数式编程和面向对象式编程 As Oracle Corporation has introduced some Functional constructs in Java SE 8, now-a-da ...

  7. Java for函数用法_Java函数式编程(四)集合的使用

    第二章:集合的使用 我们经常会用到各种集合,数字的,字符串的还有对象的.它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多.在这章中,我们探索下如何使用lambda表达式来操作集合. ...

  8. python unique函数_《Python编程从入门到实践》json数据可视化练习详解

    <Python编程从入门到实践>16.2中,计算收盘价均值的程序有些不易看懂,结合我自己的理解进行一些说明. 使用的数据集:join格式的数据, 数据集是由多个字典为元素组成的列表.每个字 ...

  9. strstr函数_【每日编程176期】实现strStr() II

    每日编程中遇到任何疑问.意见.建议请公众号留言或直接撩Q474356284(备注每日编程) 今日问题: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串, ...

最新文章

  1. 这可能是最全的机器学习工具手册!
  2. Zabbix字符集乱码及Centos7补全设置
  3. dos 删除文件夹 rd
  4. linux 监控命令free,简单了解Linux性能监控命令free
  5. Spring注解开发-属性依赖注入
  6. 英文c语言笔试题,关于C语言模拟笔试题
  7. Python中的正则表达式找到所有符合要求的字符串
  8. 解决vi/vim中粘贴会在行首多很多缩进和空格的问题
  9. cesium之地图显示坐标、比例尺、海拔高度效果篇
  10. linux之 sed命令
  11. aplay amixer用法详解
  12. 服务器通过无线modem接入4g网络,24-4G Modem管理配置
  13. 激光投影仪与普通投影仪有什么区别?应该怎么购买?
  14. 阿里云的WEB应用防火墙(WAF)能抵挡什么攻击
  15. xctf misc基础题
  16. Microblaze程序固化流程
  17. 微信的账号连接服务器失败怎么回事,微信无法连接到服务器的原因和6个解决方法...
  18. 计算机网络课程实验报告一
  19. 一文读懂STM32时钟树(时钟系统)(以STM32F767为例)
  20. 浏览器 代理服务器无法响应

热门文章

  1. CF1396B Stoned Game(博弈论)
  2. P4074-[WC2013]糖果公园【树上带修莫队】
  3. P1040,jzoj1167-加分二叉树【树形dp】
  4. P3246 [HNOI2016]序列(莫队+单调栈+ST表)
  5. 【笛卡尔树】【树状数组】Beautiful Pair(P4755)
  6. 2017西安交大ACM小学期 刁钻的顾客[3进制+折半枚举]
  7. 12、java中的I/O流(2)
  8. 如何使用MAT进行JVM内存泄露分析
  9. 影响程序员生涯的三个错误观念,你千万不要犯
  10. MySQL format()函数