如何在Wicket中正确创建无状态窗体和无状态结果页

如何在Wicket中正确创建无状态窗体和无状态结果页,wicket,wicket-1.5,Wicket,Wicket 1.5,我有一个复杂表单的web应用程序: 执行字段验证 将值转换为便于下一页分析的输入格式(数组) 将用户重定向到下一页(数据在URL中传递) 然后,下一页加载数据,执行计算并显示结果 这一切都是在Wicket中无状态完成的。我在想我是怎么做到的。感觉不“对”。转换为数组并重定向“工作”,但必须有更好的方法 更新 表单无状态的原因: 该web应用程序与其他两个web应用程序共享服务器。部署此应用程序的新版本后,我遇到了OutOfMemoryExceptions。当我在将表单转换为无状态之前检查Tomc

我有一个复杂表单的web应用程序:

  • 执行字段验证
  • 将值转换为便于下一页分析的输入格式(数组)
  • 将用户重定向到下一页(数据在URL中传递)
  • 然后,下一页加载数据,执行计算并显示结果 这一切都是在Wicket中无状态完成的。我在想我是怎么做到的。感觉不“对”。转换为数组并重定向“工作”,但必须有更好的方法

    更新
    表单无状态的原因:
    该web应用程序与其他两个web应用程序共享服务器。部署此应用程序的新版本后,我遇到了
    OutOfMemoryException
    s。当我在将表单转换为无状态之前检查Tomcat Manager应用程序时,我通常会看到约150个或“活动会话”。现在表单/结果页是无状态的,我看到5个“活动会话”。这大大减少了我的内存使用量。尽管如此,我仍然有一个令人不安的疑问:

    建议:
    我开始考虑是否应该删除“结果”页面挂载点,并将其转换为一个面板。这样我就可以直接将复杂的对象传递给它,并在整个页面刷新中交换面板。在无状态页面中也可能出现这种情况吗

    张贴

    另外,我不相信wicket天生就支持POST重定向:

    您仔细查看了
    OutOfMemoryError
    ?通常,在重新部署应用程序时,permgen空间不足,而用户内存不足。Permgen空间泄漏非常常见且难以清除。这可能与Wicket无关,但更多的是与保持加载的类有关。您应该尝试使用Java8(没有永久生成)或更新版本的Tomcat(和Wicket),因为在更新版本的框架和容器中经常会解决类加载器泄漏问题


    另请参阅本文:

    如果您必须使其保持无状态,我能想到的唯一改进是发布数据,而不是将数据放在URL中。您的页面可以有两个表单,一个用于实际验证内容,另一个“隐藏”表单将在成功提交第一个表单时重新呈现,并将用户输入作为隐藏字段。第二个表单的操作将指向您的无状态页面,并将通过附加到呈现该页面的ajaxrequest的javascript提交。请记住使用无状态检查器确认所有内容都是无状态的(如果任何组件或行为不是无状态的,则页面将恢复为有状态)。如果在验证后传输数据(无论是POST还是通过GET参数),则不应信任第二页上的数据,因为它可能已被篡改。要么在第二页进行验证,要么在服务器上传输数据(aka会话)。我在第二页的数组解析中添加了验证。然而,无可否认,它不如我最初的表单验证那么健壮:(