2013-04-22 27 views
3

创建一个无状态的形式和无国籍结果页面我有一个复杂形式的Web应用程序:我怎样才能正确地在检票

  1. 进行现场验证,
  2. 将值转换为输入格式(阵列)很容易解析下一页。
  3. 将用户重定向到下一页(数据通过URL传递)
  4. 下一页然后加载数据执行计算并显示结果。

这一切都是在Wicket无状态地完成的。我在想我是如何做到这一点的。它不觉得“正确”。转换为数组并重定向“工作”,但必须有更好的方法。

UPDATE
为什么形式是无状态:
问题股2个其他Web应用程序服务器的Web应用程序。部署此应用程序的新版本后,我遇到OutOfMemoryException。当我检查Tomcat管理器应用程序之前我将表单转换为无状态,我会经常看到〜150或“活动会话”。现在,表单/结果页面是无状态的,我看到5个“活动会话”。这对我的记忆体使用有很大的影响(我认为)。我还有虽然唠叨的疑问:https://stackoverflow.com/questions/16049219/how-to-handle-a-hibernate-bi-directional-mapping-for-a-set-properly

建议:
我已经开始想,如果,也许我应该删除“结果”页面挂载点并将其转换成一个面板。这样我就可以直接将我的复杂对象传递给它并在完整页面刷新中交换面板。这在无状态页面中甚至可能吗?

POST
此外,我不相信检票原生支持POST重定向:How to use post method in wicket

+1

如果你**必须**保持状态的,我能想到的唯一的改善,而不是发布将它们放在URL的数据。你的页面可能有两种形式,一种是你的实际验证内容,另一种是“隐藏”的,在成功提交第一个时会被重新渲染,并将用户的输入作为隐藏字段。第二种形式的动作指向你的无状态页面,并且会通过附加到呈现它的ajaxrequest的javascript提交。 – 2013-04-23 11:11:33

+0

记得使用StatelessChecker来确认一切都是无状态**(如果任何组件或行为都不是无状态的,则页面将恢复为有状态)**。 – 2013-04-23 13:02:21

+0

如果您在验证后传输数据(无论是POST还是通过GET参数)*,则不应该信任第二页上的数据,因为它可能已被篡改。您可以在第二页上进行验证,或者在服务器上传输数据(又名会话) – bert 2013-04-29 08:23:57

回答

1

你在OutOfMemoryError密切关注?通常,当重新部署一个应用程序时,用尽了permgen空间,而不是用户内存。 Permgen空间泄漏非常常见,难以清除。可能这与Wicket无关,但更多的是继续加载类。您应该尝试使用Java 8(没有永久生成),或者更新版本的Tomcat(和Wicket),因为在较新版本的框架和容器中经常会遇到类加载器泄漏问题。

请参见这篇文章:Avoiding Apache Tomcat Out Of Memory Errors