gpt4 book ai didi

java - JSF:以编程方式显示/调用对话框

转载 作者:行者123 更新时间:2023-11-30 11:39:33 24 4
gpt4 key购买 nike

如何以编程方式显示/调用对话框并将其添加到舞台(实际浏览器窗口)?

我想每 2 小时触发一次数据库更新。我用 TimerTask 完成了这项工作。这对我来说很好,计时器任务从数据库中获取我想要的所有数据。在触发此计时器任务之前,我想“锁定”屏幕几秒钟,没有用户( session 范围)可以访问数据库(我也知道这将如何工作)。我的问题是我不知道/找不到以编程方式调用对话框的方法。


更新 我想设置这个 primefaces 对话框:

Dialog dialog = new Dialog(); 
dialog.setAppendToBody(true);
dialog.setModal(true);
dialog.setVisible(true);
dialog.setWidgetVar("generatedDialog");
dialog.setId("fancyDialog");
dialog.setClosable(false);
dialog.setHeader("Getting latest information from the database");
dialog.setDynamic(true);
dialog.setResizable(false);
dialog.setDraggable(false);

如何在我的浏览器中显示它?

最佳答案

您不需要以编程方式创建对话框。你需要的是Push Technlogogy ,即服务器启动与客户端的交互。 PrimeFaces 已经拥有这项技术,随时可供您使用。

满足您需求的基本案例是 PrimePush - FacesMessage :

  • 用户写一个通知。
  • 服务器收到通知。
  • 通知发送到/notifications下的PushContext channel 。
  • 致所有包含 /notifications 的客户 channel ,将执行一个 Action 。在这种情况下, channel 仅在同一页面中,操作将是显示通知。

您可以通过在两个不同的导航器中打开同一页面并发送通知来测试此行为。所有页面都会显示通知(并且看起来像您想要的)。

有了这个例子,你唯一需要做的就是:

  1. 在每个页面(这确实是一项繁琐的工作,但这是您想要/需要的)或母版页(如果您使用模板系统)上设置 channel 。
  2. 您的计时器必须以某种方式调用服务器请求来启动通知。有 sample here关于如何以编程方式上传文件,但您只需启动请求1,无需发送任何参数。
  3. Timer 调用的请求将向 channel 添加通知。
  4. channel 将自动触发操作并可以执行您想要/需要的操作。在提供的示例中,它显示咆哮声,但您可以修改它以显示 <p:dialog>。 .

1 为了防止用户为您调用此请求,最好设置一个 Filter这会阻止除您的计时器之外的任何人执行请求。

关于java - JSF:以编程方式显示/调用对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com