- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经使用 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"><< Recent posts</a>
<a wicket:id="previousPosts">Previous posts >></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/
过去,我为我的表单构建了如下标签: : 我还需要使用wicket:label吗?标签?我没有使用 wicket:label在 wicket 7 中,它似乎工作正常。我可能不理解使用 wicket:la
是否可以为 MarkupContainer 生成标记?动态地,即不为其存储 HTML 文件? 我考虑将标记作为纯字符串从数据库中读取,以提供类似 CMS 的功能。 最佳答案 有趣的问题,我不确定这是否
是否有适用于 Wicket 1.5 的有效、支持和维护的脚手架解决方案?我知道 Wicketopia 位于两个不同地点 sourceforge和 github但这仍然针对 wicket 1.4,带来了
我想了解一些关于 wicket 支持泛型模型的信息。我了解了模型、 Prop 模型和 Prop 复合模型。 但是 Model 类呢?如果我这样做会发生什么: Label label = new Lab
如何在 Wicket 中实现多选下拉。我能够使用 bootstrap 创建多选下拉 View ,但我无法获得如何将所选选项与下拉组件的 IModel 相关联? Wicket 有没有可能?我不想使用 L
我正在使用 wicket 1.4.9 并实现了 spring + wicket auth-role 并根据页面上的角色使用@AuthorizeInstantiation。我有多个自定义角色。 我已经按
如何在 Wicket 1.5 中执行以下操作? page.getRequestCycle().setRequestTarget(new RedirectRequestTarget("http://ww
我想用密码保护 Wicket 中的网页,以便用户只有在他/她登录后才能访问它。 我还希望该页面显示登录页面,然后在登录用户试图访问的原始页面后。 这是如何用 wicket 完成的?我已经创建了一个登录
我使用的是 wicket 1.5,但在 getClientInfo() 方法中看不到 (WebRequest)RequestCycle.get().getRequest() 我在另一个地方看到了这段代
我刚刚尝试了 Apache Wicket“Hello, world”应用程序,我注意到在呈现的 HTML 输出中,Wicket 暴露了它的内部属性。 这是呈现的 HTML 在浏览器的“查看源代码”中的
我找不到像 wicket:include 之类的 wicket 标签?谁能建议我什么?我想在 html 文件中包含/注入(inject)原始源代码?如果没有这样的实用程序,有什么建议来开发它吗? 更新
在页面中查找特定(已知 wicket id)Wicket 组件的方法是什么? 最佳答案 您的选择是: get()搜索一个组件的方法 特定路径上的组件。 安 iterator()在拥有他所有 child
我正在为 wicket 页面编写测试。我的页面上有三个下拉菜单。根据从下拉列表中选择的值,面板会被渲染(面板包含一个数据表)。 如何更改 wicket 测试中下拉菜单的值,以便我可以针对所选值的不同组
在我的 wicket 应用程序中,有一些页面供用户使用,具体取决于他们的角色和不同的标准。在我的数据库中,我存储了用作该用户背景的图像路径。每个用户都有一个独特的页面。我知道我可以添加读取图像,如果我
如何在 Wicket 中定义我自己的反馈消息? 例如:如果我提供了一个错误的用户名,我想得到一个错误信息,如“用户名不正确,请尝试再次登录”。而不是使用默认的错误消息。 一个例子会是什么样的? 最佳答
假设我想要 3 个不同的 *.html 用于 WebPage。 F.e. page_small.html、page_tablet.html、page_desktop.html。我如何解析 screen
我无法确定 Wicket 应用程序中 RuntimeException 的原因。我设置了许多断点,但是当我提交表单时,只有在加载表单时,没有一个断点被触发。这是堆栈: WicketMessage: N
我刚刚编写了我的第一个 Wicket 组件 :) 它包含一个 ListView 和一些 Radio 输入字段。现在我想对所选值是否进入模型进行单元测试。 由于 WicketTester.newForm
我的类属性有两个 CSS 类值。 HTML 开头是这样的: 我想动态地把它改成这样: 目前我正在这样做: component.add(new SimpleAttributeModifier("cl
我有一个使用 PropertyModel 的文本字段,如下所示: TextField ageField = new TextField("age", new
我是一名优秀的程序员,十分优秀!