6

所以我正在阅读Wicket 标签下比较Apache WicketApache Click的另一个问题。在我看来,一个简洁的解释。我对 Wicket 世界比对 Click 世界更熟悉。

我读到的评论之一是您可以制作无状态的 Wicket 页面。我开始考虑这个问题,但想不出一种方法来为无状态的东西发出请求或页面请求。这在某些情况下肯定会派上用场。那么如何开始使用没有状态的 Wicket 呢?

4

5 回答 5

16

Wicket 默认是无状态的,并在需要时切换到有状态模式。打破无状态模式非常容易。

我发现用wicket-devutils 项目@StatelessComponent中的注释预期的无状态页面和无状态组件很有用。然后我在我的方法中添加一个这样的:StatelessCheckerWebApplication.init()

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

这样我总是会得到一个关于有问题的有状态组件的异常。

于 2010-10-17T18:03:03.640 回答
8

如果页面是可收藏的并且不包含任何非无状态组件/行为,则该页面将自动无状态并且不存储在会话中。我认为只要用户只访问无状态页面,就不会创建会话。在大多数情况下,如果有关页面显示方式的所有内容都可以仅通过无参数构造函数或采用 PageParameters 参数的构造函数来确定。普通的 Link 和 Form 类不是无状态的,因此您需要使用 StatelessForm 和 StatelessLink 。

于 2010-02-01T16:42:50.417 回答
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);
        }
    }
}
于 2012-01-07T12:21:06.757 回答
3

如果您有意确保页面是无状态的,则该setStatelessHint(boolean state)方法很有用。

如果页面不是无状态的,它会发出警告。

有关更多信息,请参见此处:Wicket Stateless pages

于 2011-03-17T20:39:47.977 回答
0

根据用户是否进行身份验证,页面可以是无状态或有状态的情况如何?

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

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

于 2012-01-11T07:21:23.163 回答