[英]Stateless Apache Wicket stateless pages/requests
所以我正在閱讀Wicket標簽下的另一個問題 ,比較Apache Wicket和Apache Click 。 在我看來,這是一個簡明的解釋。 我比Wicket世界更熟悉Click世界。
我讀到的其中一條評論是你可以制作無狀態的Wicket頁面。 我開始考慮這個問題,無法找到一種方法來為無狀態的東西發出請求或頁面請求。 在某些情況下,這肯定會派上用場。 那么如何在沒有狀態的情況下開始使用Wicket?
Wicket默認是無狀態的,並在需要時切換到有狀態模式。 打破無狀態模式非常容易。
我發現它是有用的注釋預期無狀態頁面和無狀態組件與@StatelessComponent
,這是在檢票devutils項目中找到。 然后我在我的WebApplication.init()
方法中添加一個StatelessChecker
,如下所示:
protected void init(){
...
this.addPostComponentOnBeforeRenderListener(new StatelessChecker());
...
}
這樣我總是得到關於違規有狀態組件的例外。
如果頁面是可收藏的並且不包含任何非無狀態組件/行為,則頁面將自動無狀態並且不會存儲在會話中。 我認為只要用戶只訪問無狀態頁面,就不會創建會話。 在大多數情況下,如果關於如何顯示頁面的所有內容都可以僅使用no-args構造函數或采用PageParameters參數的構造函數來確定。 普通的Link和Form類不是無狀態的,因此您需要使用StatelessForm和StatelessLink。
我更願意在測試中檢查一下。
因此無狀態頁面的每個測試都會覆蓋
getStatelessWebPage()
默認情況下返回null。
然后在基本測試中我有通用測試,訪問頁面上的所有組件並檢查組件是否是無狀態的
@Test
public void checkForStateless()
{
StatelessWebPage statelessPage = getStatelessWebPage();
if (statelessPage != null)
{
Page page = (Page)statelessPage;
if (!page.isPageStateless())
{
//find the reason
Component statefulComponent = page.visitChildren(Component.class, new StatelessChecker());
if (statefulComponent != null)
{
fail("Stateless page contains stateful component ["
+statefulComponent.getClass().getName()+" : "
+ statefulComponent.getMarkupId() +"]");
}
}
}
}
和
class StatelessChecker implements IVisitor<Component, Component>
{
@Override
public void component(Component component, IVisit<Component> iVisit)
{
if (!component.isStateless())
{
iVisit.stop(component);
}
}
}
根據用戶是否已進行身份驗證,頁面可以是無狀態還是有狀態的情況如何?
一個示例可能是典型的“帳戶”面板,它位於大多數網頁的頂部,顯示當前登錄的用戶名,個人資料鏈接等,
網站上的大多數頁面都位於頂部,這意味着兩個頁面必須能夠同時具有狀態和無狀態,具體取決於用戶是否已登錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.