首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止wicket-9抛出StalePageException

如何阻止wicket-9抛出StalePageException
EN

Stack Overflow用户
提问于 2021-08-12 10:39:13
回答 1查看 50关注 0票数 0

只有在复制页面之前对页面执行了某些Ajax操作时,Wicket才会抛出StalePageException。

示例wicket项目可以在上找到,以及重现异常的步骤。

https://github.com/rjngshn/java-wicket-testing/tree/main

有没有办法确保这个异常不会抛出?

谢谢

拉贾尼

EN

回答 1

Stack Overflow用户

发布于 2021-08-12 12:19:33

Wicket中提供的默认行为是在AJAX请求进入时将其过于排队。假设您有一个带有回调的按钮,当单击它并更新UI时,它会执行一些工作。这意味着如果连续三次快速单击该按钮,则最后两个请求将被排队,并在第一个请求完成后进行处理。

一个简单的解决方案是将AjaxChannel的行为从排队更改为活动。这意味着,如果在处理活动(未完成)请求时接收到任何AJAX请求,则这些请求将被忽略。

那么,我们如何在一个地方覆盖Wicket的默认行为,并确保所有AjaxChannel都被修改呢?我们使用自定义的AjaxRequestTarget.IListener。

代码语言:javascript
复制
public class ActiveAjaxListener implements AjaxRequestTarget.IListener {
 
 private static final AjaxChannel ACTIVE_CHANNEL = new AjaxChannel(AjaxChannel.DEFAULT_NAME, AjaxChannel.Type.ACTIVE);

 @Override
 public void updateAjaxAttributes(AbstractDefaultAjaxBehavior behavior, AjaxRequestAttributes attributes) {
    attributes.setChannel(ACTIVE_CHANNEL);
 }
}

我们的ActiveAjaxListener类将修改每个AJAX行为,并确保它使用活动通道。要注册它,我们只需将以下行插入到我们的WebApplication init()方法中:

代码语言:javascript
复制
getAjaxRequestTargetListeners().add(new ActiveAjaxListener());

(我从https://www.coderdreams.com/wicket-quick-tip-4-change-default-ajaxchannel-to-active/抄袭了这个解释)

另一种方法是使用面纱,通过JS/CSS防止双击。有关此方法的更多详细信息,请访问JavaScript / Wicket : How to display an overlay which prevents user interaction

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68755844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档