java - Wicket 7 - 向导完成按钮生成多个 onClick 事件

标签 java wicket

我们正在使用 Wicket Wizard 组件。在向导的最后一步,我们发现如果用户快速单击完成按钮,Wicket 会多次调用我们的 onFinish() 方法。这给我们带来了问题。 有趣的是,这个问题出现在我们尝试过的所有浏览器(IE、Chrome)中,但 Firefox 中却没有。该浏览器似乎检测到多次点击,并且只向服务器发送一次点击事件。

问题是,我们可以采取什么措施来防止这种情况发生? 通过查看 Wicket 框架代码,我可以看到导航按钮包含在 WizardButtonBar 中,并且 FinishButton 正在处理 onClick 事件,但我不确定覆盖或控制此行为的正确方法,并以某种方式检测多个 onClick 事件

最佳答案

您似乎没有使用 Ajax,是吗?

如果你这样做了,你可以只添加面纱 - 例如通过覆盖#getAjaxIndicatorMarkupId() - 任何双重提交都会被阻止。额外的好处:如果用户在向导完成后按下后退按钮,浏览器将离开向导并且用户无法再次完成它。

对于非 Ajax 请求,您必须将自己的 veil JavaScript 添加到按钮。
为了防止用户返回并再次完成向导,您可以使用基于 token 的解决方案:
在向导开始时获取一个 token (可能只是一个计数器)。向导完成后,将 token 标记为已用(例如,将其与域对象一起存储)。
对于向向导发出的每个请求,您可以检查 token 是否仍然有效 - 如果无效,请将用户重定向到另一个页面,说明向导已完成。

关于java - Wicket 7 - 向导完成按钮生成多个 onClick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43658230/

相关文章:

Java 继承 : Overwritten or hidden methods

spring - 如何使用 Spring 将值注入(inject) Wicket 口页面?

html - 带有CSS的全屏背景图片

ajax - Wicket.Ajax.Call.failure : Error while parsing response: Object required

java - 如何从 Wicket 提供动态 JavaScript 文件?

java - Swing 中用于 DB 外键的 JTable 和 JComboBox : Getting/Setting value

java - Android AsyncTask 中的多个请求

java - Eclipse 类未找到异常

java - Myframe 不是抽象的,不会重写抽象方法

ajax - Wicket 和 SVG - 是否存在任何组件?