如何在 JSF 中防止双击

2023-12-01

我们有一些搜索页面需要运行大量数据,并且需要一段时间才能完成。当用户单击搜索按钮时,我们希望不允许他们再次提交搜索结果。

在 JSF 中是否有进行“双击”检测/预防的最佳实践?

PrimeFaces 组件似乎可以做我们想要的事情,因为它会在单击搜索按钮和搜索完成之间的一段时间内禁用 UI,但是我们是否可以使用更通用的策略(也许不是)依赖 PrimeFaces)?理想情况下,在搜索完成之前,对该按钮的任何单击都将被禁用或忽略。我们不一定需要禁用整个 UI(因为 blockUI 允许您这样做)。


如果你只使用ajax请求,你可以使用jsf.ajax.addOnEventJSF JavaScript API 的处理程序。下面的例子将应用于所有按钮type="submit".

function handleDisableButton(data) {
    if (data.source.type != "submit") {
        return;
    }

    switch (data.status) {
        case "begin":
            data.source.disabled = true;
            break;
        case "complete":
            data.source.disabled = false;
            break;
    }    
}

jsf.ajax.addOnEvent(handleDisableButton);

或者,如果您仅在特定按钮上需要此功能,请使用onevent的属性<f:ajax>.

<h:commandButton ...>
    <f:ajax ... onevent="handleDisableButton" />
</h:commandButton>

如果您还需要在同步请求上应用此功能,那么您需要考虑到当您在onclick,然后按钮的name=value对不会作为请求参数发送,因此 JSF 将无法识别该操作并调用它。因此你应该只禁用它after浏览器已发送 POST 请求。没有用于此目的的 DOM 事件处理程序,您需要使用setTimeout()点击后约 50 毫秒禁用按钮。

<h:commandButton ... onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);" />

这只是相当脆弱。对于速度慢的客户端来说,它可能太短。您需要增加超时或转向其他解决方案。

也就是说,请记住,这只能防止通过网页提交时的重复提交。这并不能阻止编程式 HTTP 客户端的双重提交,例如URLConnection、Apache HttpClient、Jsoup 等。如果您想在数据模型中强制执行唯一性,那么您不应该阻止重复提交,而应该阻止重复插入。这可以通过在 SQL 中轻松实现UNIQUE对感兴趣的列的约束。

也可以看看:

  • 用于防止重复提交的纯 Java/JSF 实现
  • 如何在呈现响应之前处理多次提交?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JSF 中防止双击 的相关文章

随机推荐

  • ES6 需要配置 webpack 吗?

    我有一个 Angular 应用程序 其中包含针对 ES6 的 tsconfig 文件 compileOnSave false compilerOptions allowJs true baseUrl outDir dist out tsc
  • 如何手动设置语料库中的文档ID?

    我正在从数据帧创建 Copus 我将其作为VectorSource因为我只想将一列用作文本源 这可以找到 但是我需要语料库中的文档 ID 来匹配数据帧中的文档 ID 文档 ID 存储在原始数据框中的单独列中 df lt as data fr
  • 增强序列化:前向兼容性因输入流错误而失败

    遵循这个问题 Boost序列化子类我正在尝试支持使用 boost 序列化生成的存档的前向兼容性 但我在使用较旧的代码读取较新的存档时遇到问题 class A public A virtual A default private friend
  • 如何避免 Scala 中类型绑定的重复

    我有一个带有约束类型参数的类 我尝试过identity但返回类型不精确 并且在方法中identityTP 我需要再次指定约束 如何避免使用适用于此类型的方法重复此约束 这是一个例子 sealed trait Location case ob
  • 添加到 window.onload 事件?

    我想知道如何向 window onload 事件添加另一个方法调用 被分配了一个方法调用 假设在脚本的某个地方我有这个作业 window onload function some methods 1 然后稍后在脚本中我有这个作业 windo
  • 在短时间内打开大量连接时的ECONNRESET

    我有这样的情况 我想在猎户座上创建大量实体 我正在将 Orion 和 mongo 的 docker 版本与此 docker compose 一起使用 version 3 services mongo image mongo 3 4 volu
  • 在 XCode 中链接 libuv 库

    有没有人有过在 xcode 中链接 libuv 的经验 我在 git 中创建了一个子模块 以便轻松更新库 但我不太清楚如何正确地将库添加到项目中以允许我包含 uv h 任何帮助我将不胜感激 您可以使用 GYP 为 libuv 生成 xcod
  • 调整 UITableViewCell 框架大小问题

    我正在尝试调整我的大小UITableViewCell s框架通过 cell setFrame CGRectMake cell frame origin x cell frame origin y cell frame size width
  • 为什么unix和Java运行时显示的统计数据存在差异

    我的应用程序遇到一些内存问题 需要帮助理解这些统计数据 Unix top 显示了我的进程的这些统计数据 VSZ 37 4g RSS 20 0g 因此 这意味着 20g 当前已换入进程并正在使用 但是 当我使用运行时类从应用程序中打印统计信息
  • 安装了最新的 JDK 1.8.0,但我的 Javac 版本仍然显示旧版本(Windows 7 - 64)

    我一直在尝试使用 Angular 安装 NativeScripttutorial在过去的两天里 我不断遇到有关 Android SDK 安装不正确和冻结的问题 最后在尝试安装 Android Studio 之前重新安装了最新的 JDK 和
  • “无法在客户端计算机上加载 DLL 'SQLite.Interop.dll' 错误

    我创建了一个 Winforms 应用程序 并将 SQLite 与 Entity Framework 6 结合使用 我使用的是 Visual Studio 2013 该应用程序在我的本地计算机上完美运行 但是 当程序在另一台机器上运行时 会出
  • 对 var2 的更改也会更改 var1,var1 是从该变量派生的

    我正在制作一个 PowerShell 脚本 并遇到了一个奇怪的问题 至少对于我的世界观来说是这样 这是具有 1 个属性和一些整数值的对象 Source Source Priority 43 37 26 51 23 69 6 43 我想创建一
  • ng2-charts条形图不显示数据/图表标签

    我在 angular2 中使用 ng2 charts 构建了水平条形图 但我不确定为什么我没有看到图形数据 也没有在控制台中看到任何错误 HTML
  • 迭代 JSON 对象字符串

    我是一个 JavaScript 菜鸟 在创建 json 字符串后 我有一个由 google gson API 创建的 JSON 字符串 我将其传递给我的 javascript 函数 所以在 javascript 变量中我有一个字符串如下 v
  • 如何创建可在 Windows 7 Phone 和 iPhone 上运行的应用程序?

    很清楚单点触控是解决方案的一部分 因为它允许 C 代码在 iPhone 上运行 然而 Mono Touch 包装了 iPhone API 因此不提供通用 API 另一种选择是一个 jave 脚本工具包 它可以在两者上工作并提供在线数据存储
  • 如何在 IBM Watson 聊天机器人对话中添加新行?

    目前 我正在使用 IBM Watson Coversation api 提供的聊天机器人服务 现在我面临一个问题 与在聊天机器人的文本回复中添加新行有关 谁能告诉我该怎么做 在这种情况下 您可以使用HTML为此 内部对话流程为 br 检查我
  • Unity - 如何从不同的场景获取游戏对象?

    首先 我是一个初学者 所以对我要轻松一些 我正在尝试从另一个场景激活和停用游戏对象 游戏中的玩家 基本上 我试图通过停用当前玩家模型来更改游戏场景中的玩家 并在用户按下商店场景中的某个按钮时激活游戏场景中所需的玩家模型 但我无法访问游戏对象
  • 在已安装程序列表中显示发布者名称

    我使用 Wix Toolset v3 11 生成 msi我的 Windows 应用程序的安装程序 如何让发布者名称出现在我的申请条目中设置 gt 应用程序和功能 I noticed that some entries in that lis
  • dplyr 如何按组落后

    我有一个包含交货时间的订单和应收账款的数据框 我可以使用 dplyr 根据组提前时间填写接收栏吗 df lt data frame team c a a a a a b b b b b order c 2 4 3 5 6 7 8 5 4 5
  • 如何在 JSF 中防止双击

    我们有一些搜索页面需要运行大量数据 并且需要一段时间才能完成 当用户单击搜索按钮时 我们希望不允许他们再次提交搜索结果 在 JSF 中是否有进行 双击 检测 预防的最佳实践 PrimeFaces 组件似乎可以做我们想要的事情 因为它会在单击