2010-02-01 95 views
5

所以我在Wicket標籤下閱讀another question,比較Apache WicketApache Click。在我看來,一個簡潔的解釋。我比「點擊」世界更熟悉Wicket世界。Stateless Apache Wicket無狀態頁面/請求

我讀過的評論之一是您可以製作無狀態Wicket頁面。我開始思考這個問題,無法想出一個方法來提出無狀態請求或頁面請求。這在某些情況下肯定會派上用場。那麼如何開始使用沒有狀態的Wicket?

+0

http://stackoverflow.com/a/3441584/176897 – tetsuo 2013-07-10 16:24:45

+0

上面的鏈接不工作,試試這個:https://cwiki.apache.org/confluence/display/WICKET/Stateless+pages – snorbi 2013-09-02 14:44:18

回答

8

如果一個頁面是書籤的,並且不包含任何非無狀態的組件/行爲,那麼該頁面將自動爲無狀態,並且不會存儲在會話中。我認爲,只要用戶只訪問無狀態頁面,就不會創建會話。大多數情況下,如果關於如何顯示頁面的所有信息都可以單獨由無參數構造函數或採用PageParameters參數的構造函數確定。普通的Link和Form類不是無狀態的,所以你需要使用StatelessForm和StatelessLink來代替。

+0

謝謝傑夫。現在,這些無狀態...組件的存在也是有意義的。 – Matt 2010-02-01 18:26:29

16

Wicket默認爲無狀態,並在需要時切換到有狀態模式。打破無狀態模式很容易。

我發現它是有用的註釋預期無狀態頁面和無狀態組件與@StatelessComponent,這是在檢票devutils發現項目。然後,我在我的WebApplication.init()方法添加 一個StatelessChecker這樣的:

protected void init(){ 
    ... 
    this.addPostComponentOnBeforeRenderListener(new StatelessChecker()); 
    ... 
} 

這樣,我總是對違規狀態組件異常。

3

如果您有頁面有意確認無狀態,那麼setStatelessHint(boolean state)方法很有用。

如果頁面不是無狀態的,它會發出警告。

的更多信息,請瀏覽:Wicket Stateless pages

4

我寧願檢查測試。

所以每個測試無國籍頁覆蓋

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); 
     } 
    } 
} 
0

怎麼樣的情況下可以將該頁無狀態還是有狀態取決於用戶是否已認證?

一個例子可能是典型的「帳戶」面板中,位於大多數網頁的頂部,顯示當前登錄的用戶名,個人資料鏈接等,

網站上的大多數頁面將在有這頂部,這意味着兩個頁面必須能夠有狀態和無狀態,取決於用戶是否已登錄。