【问题标题】:Wicket multi-tab ajax & page serializationWicket 多标签 ajax 和页面序列化
【发布时间】:2015-04-08 07:08:18
【问题描述】:

VMWare Horizon 上的 WicketAjax 有一个令人讨厌的问题。用户看到的是 ajax 链接无法按预期工作。确切地说:它们有效,但似乎作用于旧版本的页面。例如,当我有一个计数器时,它似乎确实处理了一个 ajax 更新,但该值永远不会增加。该值存储在Model 中,所以我认为它与页面序列化有关。

我接着做了一个更简单的实验:在 Wicket-Exmaples(参见:http://www.wicket-library.com/wicket-examples/ajax/on-change-ajax-behavior)上有一个输入框。如果按enter,则将值提交到页面。这在一个浏览器选项卡中运行良好。

但是,如果我打开两个选项卡(通过将 URL 复制粘贴到新选项卡中,我们称它们为 AB)。我使用 enter 在标签 A 中提交了一个值。我刷新标签 B 并获取标签 A 中提交的值。

发生这种情况的唯一方法似乎是他们阅读彼此的序列化页面。

如何防止这种行为?

ps。我使用Wicket 版本 6.19.0,检票口示例似乎运行 6.x。 ps2。我在 Chrome 中注意到了这种行为。

【问题讨论】:

    标签: ajax serialization wicket


    【解决方案1】:

    为防止出现这种情况,您应确保在同一页面上没有打开两个或更多选项卡(即具有相同页面 ID)。 发生这种情况时,您可以使用https://github.com/apache/wicket/blob/2f3b357703df3fe5c49580b3c46d4fd231208474/wicket-core/src/main/java/org/apache/wicket/ajax/AjaxNewWindowNotifyingBehavior.java 得到通知。只需执行 setResponsePage(getPage().getClass()) 即可开始一个新实例。

    【讨论】:

    • 谢谢@martin-g,这看起来很有用。我想知道是否可以为该选项卡创建一个新的WebSession,以便其他所有内容都“正常工作”。你怎么看?
    • 会话被编码为 cookie “JSESSIONID”。浏览器会自动发送。因此,所有选项卡和窗口都是服务器端的同一用户。您可以在 url 中对其进行编码并为此链接显式删除它,但这是您必须做的手动工作...
    【解决方案2】:

    这是因为两个选项卡在一个会话中工作。

    在决定请求用于哪个会话时,不考虑选项卡(因为服务器不知道它们)。

    如果您对两个浏览器而不是两个选项卡执行相同操作,它会正常工作。

    【讨论】:

    • 感谢@Glenner003 的额外解释。但是,我真的很想阻止这种情况:)
    • 您究竟是如何打开第二个标签的?您是否也传递了版本参数?然后,Wicket 将以相同的状态显示页面(使用版本参数,因此可以实现后退按钮支持)如果您在没有任何版本参数的情况下打开第二个选项卡,您应该有 2 个单独的页面。
    猜你喜欢
    • 2023-02-10
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多