【问题标题】:Stateless wicket page still having page version URL parameter appended - how to debug?无状态检票口页面仍然附加页面版本 URL 参数 - 如何调试?
【发布时间】:2012-12-31 02:55:42
【问题描述】:

我正在尝试使我的项目页面完全无状态(即将发布更多页面)并通过删除页面版本号,例如/mypage/?0

页面将statelessHint 设置为true,我还在onBeforeRender 中验证isStateless 返回true。 我还使用@StatelessComponent 注释来确保页面及其子组件真的非常非常无状态。

所以,似乎一切都是无状态的,但是版本参数仍然附加到 URL

我无法附上代码,因为它是一个包含许多组件和大量继承的庞大结构。当然,我不希望任何人告诉我问题出在哪里,而是希望有人给我一个提示,何时在 Wicket 的源中放置断点以找出问题所在。例如。谁能告诉我哪个 Wicket 类负责决定是否附加版本参数?

提前致谢, 彼得

【问题讨论】:

    标签: parameters wicket stateless


    【解决方案1】:

    要验证页面是否无状态,您必须调用 Page#isPageStateless 而不是 Page#isStateless

    为了完整起见,我还要提到 @StatelessComponent 本身什么也不做,但您必须安装 StatelessChecker

    getComponentPreOnBeforeRenderListeners().add(new StatelessChecker());
    

    Application#init。我认为它工作得很好,它应该可以找到任何有状态的组件。

    【讨论】:

    • 感谢您指出Page#isPageStateless 的存在,很高兴知道。但是,我刚刚复制了我之前遇到的情况,它也返回了true。 :( 所以我仍然需要为org.apache.wicket.Page 打开调试功能才能找到答案。
    【解决方案2】:

    显然,@StatelessComponent 在所有子组件中并不总是可靠的:(

    您可以通过将org.apache.wicket.Page 的日志级别设置为DEBUG 来调试此问题,这会在控制台输出中添加大量行。用 Grep 表示“不是无状态的,因为”来查找有关渲染的有状态组件的消息。

    在我的例子中,它是一个Image,其getStatelessHint() 方法返回false(不知道为什么)。

    【讨论】:

    • 因为您使用了由 IResource 备份的图像。为了能够找到 IResource Wicket 需要找到图像,因此页面是有状态的。通过 ResourceReference 或纯 url 备份它,它将是无状态的。
    • 感谢您的解释。现在看了,其实我觉得还是应该直接继承WebComponent,因为组件甚至不使用资源。
    猜你喜欢
    • 2012-05-28
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多