2013-01-16 36 views
1

我試圖讓我的項目的一個頁面完全無狀態(更多的頁面來),並通過幹掉頁面版本號,例如/mypage/?0無狀態wicket頁面仍附加頁面版本URL參數 - 如何調試?

頁面設置statelessHint爲true,我也在onBeforeRender中驗證isStateless返回true。 我也使用@StatelessComponent註釋來確保頁面及其子組件確實是無狀態的。

所以,似乎一切是無狀態的,但是版本參數仍然是附加到URL

我無法連接的代碼,因爲它是包含多個組件的巨大的結構和參與了很多傳承。當然,我不希望任何人告訴我問題出在哪裏,而是希望有人給我一個提示,告訴我何時在Wicket的來源中設置一個斷點來找出問題所在。例如。任何人都可以告訴我哪個Wicket類負責決定是否追加版本參數嗎?

由於提前, 彼得

回答

2

Obviosuly,@StatelessComponent並不總是可靠下來到所有的子組件:(

您可以通過設置org.apache.wicket.PageDEBUG日誌級別,這增加的負載調試這輸入你的控制檯輸出grep for「is not stateless,因爲」找到有關呈現組件的消息有狀態

在我的情況下,它是一個Image,其getStatelessHint()方法返回false(不知道爲什麼)。

+2

因爲您使用了由IResource備份的映像。爲了能夠找到IResource Wicket需要查找圖像,因此頁面是有狀態的。通過ResourceReference或普通的URL進行備份,它將是無狀態的。 –

+0

感謝您的解釋。現在我看了一下,我認爲它應該直接繼承WebComponent,因爲組件甚至不使用資源。 – peterp

5

要驗證頁面是無狀態的,您必須致電Page#isPageStateless而不是Page#isStateless

爲了完整起見,我還會提的是,@StatelessComponent本身並沒有什麼,但你必須到StatelessChecker

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

安裝在Application#init。我認爲它工作得很好,它應該找到任何有狀態的組件。

+0

感謝您指出'Page#isPageStateless'的存在,很高興知道。但是,我剛剛複製了我以前的情況,並且也返回了「真實」。 :(所以我仍然需要打開'org.apache.wicket.Page'的調試來找出答案。 – peterp