gpt4 book ai didi

java - 用 Wicket 做一个主要是无状态的 web 应用难吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:11 25 4
gpt4 key购买 nike

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

如果我理解正确的话,通过使页面可添加书签并确保没有向页面添加有状态组件来实现无状态页面。

对于我正在制作的网站,我想避免“页面过期”消息,让用户通过 cookie 登录,无需登录/创建 session 即可提供大量内容,并且我想要功能,例如分页是无状态和可 Collection 的。

例如,这没有问题。 PHP,但在我看来,很多有用的 Wicket 组件都是有状态的。我是否需要做很多工作,例如创建我自己的一组无状态组件,或者这没什么大不了的?

我希望有人能帮我指出正确的方向。

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

对于如何使用 Wicket 完成我刚才描述的任何帮助,我将不胜感激。

最佳答案

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

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

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

主页.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>

首页.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 好得多:)

关于java - 用 Wicket 做一个主要是无状态的 web 应用难吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com