2013-04-22 21 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