2010-02-01 114 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

怎么样的情况下可以将该页无状态还是有状态取决于用户是否已认证?

一个例子可能是典型的“帐户”面板中,位于大多数网页的顶部,显示当前登录的用户名,个人资料链接等,

网站上的大多数页面将在有这顶部,这意味着两个页面必须能够有状态和无状态,取决于用户是否已登录。