当前位置: 首页 > 知识库问答 >
问题:

Vaadin 14中“disableonclick”按钮的可靠性

戎洛城
2023-03-14

我使用Vaadin14,为了避免在用户双击按钮而不是只单击一次时多次发送请求,我在button实例上调用setdisableonclick(true)

对于某些按钮,这是不够的:按钮仍然可以被多次单击。在检查Chrome devtools中的dom时,我可以看到为这些按钮设置了disableonclick属性:

我怀疑这是事件处理程序调用顺序的问题(要禁用的处理程序应该在发送请求的处理程序之前调用)。

共有1个答案

路昆杰
2023-03-14

这似乎是一个瓦丁虫。当按钮处于对话框中时,该对话框关闭,然后重新打开。当您调用setdisableonclick(true)时,他们正在使用黑客从服务器端添加事件侦听器:

/**
 * Initialize client side disabling so disabled if immediate on click even
 * if server-side handling takes some time.
 */
private void initDisableOnClick() {
    if (!disableOnClickConfigured) {
        getElement().executeJs("var disableEvent = function () {"
                + "if($0.getAttribute('disableOnClick')){"
                + " $0.setAttribute('disabled', 'true');" + "}" + "};"
                + "$0.addEventListener('click', disableEvent)");
        disableOnClickConfigured = true;
    }
}

当按钮分离并重新附加时,此事件处理程序就消失了。

不幸的是,在重新打开对话框后再次调用setDisableonClick(true)没有任何帮助,因为DisableonClickConfigure已经被设置为true,因此将跳过此代码。

    null

这是我最后一个选择。对话框是一个Spring bean,所以我使用Prototype scope并将其注入ObjectFactory,然后在调用Open之前获取一个新实例。

 类似资料:
  • 问题内容: 我无法相信这行不通。 我有一个JList。我将其渲染器设置如下。基本上是一个带有两个标签和一个按钮的JPanel。 这是我的TopBottomCellRenderer。 该列表可正确呈现,但不可单击。单击它没有任何作用。 我该如何工作? 问题答案: 渲染器只是在组件上绘制的“橡皮图章”。它们不是实时的交互式组件。 请参阅以下答案:JList中的JButton以获得一种可能的解决方案。实

  • 海蓝(navy blue)是最为大众所接受的颜色之一。采用这种颜色的色彩组合可解释成可靠、值得信赖的色彩。这类组合也带有不可置疑的权威感。警官、海军军官或法官都穿着深色、稳定的海军蓝,以便在值勤时表现出统率、支配的权威感。 当海军蓝用红和金色来强调时,会变得较不严肃,但仍表达出坚定、有力量的感觉。 补色色彩组合 原色色彩组合 单色色彩组合 21 65 17 65 33 1 65 67 70 65

  • 问题内容: 因为我不想自己做,所以我正在寻找Java的良好FFT实现。首先,我在这里使用了FFT Princeton的 这个,但是它使用了对象,而我的探查器告诉我,由于这个事实,它的速度并不是很快。所以我再次搜索了一下,发现了一个:更快的FFT Columbia 。也许你们中的一个知道另一种FFT实现?我想拥有“最好的”应用程序,因为我的应用程序必须处理大量的声音数据,并且用户不喜欢等待… ;-)

  • 可靠性指标 很多领域一般都喜欢谈服务可靠性,用几个 9 来说事。这几个 9 其实是粗略代表了概率意义上系统能提供服务的可靠性指标,最初是电信领域提出的概念。 下表给出不同指标下,每年允许服务出现不可用时间的参考值。 指标 概率可靠性 每年允许不可用时间 典型场景 一个九 90% 1.2 个月 不可用 二个九 99% 3.6 天 普通单点 三个九 99.9% 8.6 小时 普通企业 四个九 99.9

  • 所以假设我有一个“开”和一个“关”按钮。当我按下打开按钮时,我希望打开按钮隐藏自己,关闭按钮显示出来,反之亦然。 一个人怎么能这么做?

  • 问题内容: 下面的代码正确返回该单元格: 但是在表视图中查找indexpath会崩溃: 我尝试了另一种方法,但是没有成功: 问题答案: 我不知道是否有简单的方法可以做到这一点。( 编辑: 实际上有。请查看@mustafa的第二个解决方案。)一种解决方法是将按钮的标签设置为in ,然后可以仅访问按钮的标签以找出按钮所属的行。 警告: 此解决方法很脆弱。如果您允许在不调用的情况下从表中添加或删除行,则