使用Wicket制作一个主要是无状态的Web应用程序是否很困难? [英] Is it difficult to make a mainly stateless web application with Wicket?

查看:124
本文介绍了使用Wicket制作一个主要是无状态的Web应用程序是否很困难?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经和Wicket合作了一两个月,用它制作简单的Web应用程序并习惯模型等等。现在我想继续前进,看看我是否可以将我迄今学到的知识用于创建中/大型Web应用程序。但是,我没有花太多时间考虑如何使页面无状态。

I've been working with Wicket for month or two now, making simple web applications with it and getting used to models and so forth. Now I'd like to move forward and see if I can put what I've learned so far to use and create a medium/large web application. However, I haven't spent much time thinking about how to make pages stateless.

如果我理解正确,通过使页面可收藏并制作无页面页面来实现确保页面中没有添加任何有状态组件。

If I understand correctly, making a stateless page is achieved by making the page bookmarkable and making sure that no stateful components are added to the page.

对于我正在制作的网站,我想避免页面过期消息,让用户通过cookie登录,在不需要登录/创建会话的情况下制作大量内容,我希望像分页这样的功能是无状态和可收藏的。

For the website I am making I want to avoid "Page expired" messages, let users be logged in via cookies, make a whole lot of the content available without needing to login/create a session, and I want functionality such as pagination to be stateless and bookmarkable.

这对于例如没有问题PHP,但在我看来,很多有用的Wicket组件都是有状态的。我参与了很多工作,例如创建我自己的无状态组件,还是没什么大不了的?

This is no problem with e.g. PHP, but it seems to me that a whole lot of the useful Wicket components are stateful. Am I in for a whole lot of work, such as creating my own set of components that are stateless, or is it no big deal?

我希望有人可以帮助我把我指向正确的方向。

I hope someone can help me out by pointing me in the right direction.

编辑:让我们说我想写博客。应该可以浏览帖子,类别等,而不必担心如果用户决定阅读文章2小时后页面将过期,然后尝试进一步导航,例如分页。我希望允许用户一次保持登录状态一个月,但我并不想将他们的会话存储一个月。

Lets say I wanted to make a blog. Browsing posts, categories and so on should be possible without having to worry that the page will have become expired if a user decides to read an article for 2 hours and then tries to navigate further via e.g. pagination. I want to allow users to stay logged in for a month at a time, but I do not exactly want to store their session for a month either.

我非常感谢感谢任何有关如何通过Wicket完成我刚才描述的内容的帮助。

I'd greatly appreciate any help on how I can accomplish what I just described, with Wicket.

推荐答案

使用Wicket构建无状态页面时,确实会丢失大多数智能内置组件,例如分页表和树。

When building stateless pages with Wicket, you do lose most 'smart' built-in components, for example paginated tables and trees.

我认为对于网站,博客等来说这不是一个问题,它通常有一个相当简单的导航模型而且不使用这种丰富组件,并使用无状态服务器友好,基于Javascript的组件/效果,如jQuery-UI或YUI。

I think this is less an issue for sites, blogs and the like, which usually have a fairly simpler navigation model and don't use this kind of 'rich' component, and use stateless-server-friendly, Javascript-based components/effects, like jQuery-UI or YUI instead.

有些事情你会做不同的事情,比如分页。例如,您不必使用内置的分页组件,而是使用页面参数和无状态链接来创建自己的机制:

Some things you'll do differently, like pagination. For example, instead of using built-in pagination components, you'll have to make your own mechanism, using page parameters and stateless links:

HomePage.html

HomePage.html

<html xmlns:wicket="http://wicket.apache.org">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
  <div class="container">

    <div wicket:id="posts">
      <h2 wicket:id="title"></h2>
      <p wicket:id="content"></p>
      Posted on <span wicket:id="date"></span>
    </div>

    <div>
      <a wicket:id="recentPosts">&lt;&lt; Recent posts</a>
      <a wicket:id="previousPosts">Previous posts &gt;&gt;</a>
    </div>

  </div>
</body>
</html>

HomePage.java

HomePage.java

package wishminimal.ui.home;

import java.util.Iterator;

import org.apache.wicket.PageParameters;
import org.apache.wicket.devutils.stateless.StatelessComponent;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;

import wishminimal.dao.PostDAO;
import wishminimal.entity.Post;

@StatelessComponent
public class HomePage extends WebPage {

    @SpringBean
    PostDAO postDAO;

    ISortableDataProvider<Post> dataProvider = new SortableDataProvider<Post>() {
        public Iterator<? extends Post> iterator(int first, int count) {
            return postDAO.findAll(first, count).iterator();
        }
        public int size() {
            return postDAO.countAll();
        }
        public IModel<Post> model(Post object) {
            return new CompoundPropertyModel<Post>(object);
        }
    };

    public HomePage(PageParameters params) {
        final int currentPage = params.getAsInteger("p", 0);

        final DataView<Post> dataView = new DataView<Post>("posts", dataProvider, 10) {
            @Override
            protected void populateItem(Item<Post> item) {
                item.add(new Label("title"));
                item.add(new Label("content"));
                item.add(new Label("date"));
            }
        };
        dataView.setCurrentPage(currentPage);
        add(dataView);

        add(new BookmarkablePageLink<Void>("recentPosts", getClass(), new PageParameters("p=" + (currentPage - 1))) {
            @Override
            public boolean isVisible() {
                return currentPage > 0;
            }
        });
        add(new BookmarkablePageLink<Void>("previousPosts", getClass(), new PageParameters("p=" + (currentPage + 1))) {
            @Override
            public boolean isVisible() {
                return currentPage < dataView.getPageCount();
            }
        });
    }
}

虽然这比有状态的Wicket便宜得多,但我仍然发现比无国籍的JSF或Struts要好得多:)

While this is much less convenient than stateful Wicket, I still find much better than say, stateless JSF or Struts :)

这篇关于使用Wicket制作一个主要是无状态的Web应用程序是否很困难?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆