无状态Apache Wicket无状态页面/请求

时间:2010-02-01 16:32:48

标签: java wicket

所以我在比较another questionApache Wicket的Wicket标记下阅读Apache Click。在我看来,这是一个简明的解释。我对Wicket世界比对Click世界更熟悉。

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

5 个答案:

答案 0 :(得分:16)

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

我发现使用@StatelessComponent注释目标无状态页面和无状态组件很有用,可以在 wicket-devutils项目中找到它。然后我补充说 我的StatelessChecker方法中的WebApplication.init()是这样的:

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

这样我总是会对有问题的有状态组件有例外。

答案 1 :(得分:8)

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

答案 2 :(得分: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);
        }
    }
}

答案 3 :(得分:3)

如果您有网页,您有意确保无状态,setStatelessHint(boolean state)方法很有用。

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

有关详细信息,请参阅此处:Wicket Stateless pages

答案 4 :(得分:0)

根据用户是否已进行身份验证,页面可以是无状态还是有状态的情况怎么样?

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

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