4

我有一个 wicket Web 应用程序,其中 Page 安装到可收藏别名。该页面包含一个带有提交操作的表单对象。

问题在于,虽然表单属于页面,但操作 url 不包含页面别名,而是以神秘的检票口操作形式创建的。有没有办法调整这种行为,所以链接会像page_alias/submit

...
setRenderStrategy(IRequestCycleSettings.ONE_PASS_RENDER);
mountBookmarkablePage("/resetpwd", ResetPasswordPage.class); 
...
public ResetPasswordPage(final String id, final PageParameters parameters) {
    final Form form = new StatelessForm();
    form.add(new Button("submit") { 
     public void onSubmit() {
         ...
        });
 add(form);
4

3 回答 3

3

如果您使用子类StatelessForm而不是Form,这将带您一部分。而不是有类似的东西

action="myapp/?wicket:interface=:1:eventEditor::IFormSubmitListener::"

将包含表单的页面安装在可收藏的 URL 上,您将获得类似的内容,例如,

action="myapp/mount/path/some/params/?wicket:interface=:0:eventEditor::IFormSubmitListener::"

MixedParamUrlCodingStrategy用于安装在WebApplication.init()

然后,您可以覆盖encodeUrlInHiddenFields()return true,这将在action属性中为您提供一个干净的 URL。

然而,这一切并没有真正改变 Wicket 处理表单的方式,也就是说,在客户端的标记中仍然有一些特定于 Wicket 的状态数据。我相信这之所以如此困难,是因为 Wicket 旨在帮助您构建具有状态的 Web 应用程序。我注意到 Wicket 在幕后做了很多事情(比如将提交的表单值与模型的 getter 在调用 setter 之前返回的值进行比较),我知道的太少了,当我把它删掉时会感到舒服。

不过,您可以使用 Wicket 来提供 RESTful Web 服务,如本博文中所述。Google 代码上还有一个名为 wicket-rest 的项目扩展了这个想法。请注意,这似乎很简单,因为它从不使用基于整个组件的 UI 构建内容。

这篇文章的人有一个不同的问题,但无论如何它帮助我更好地理解了 Wicket 表格。

于 2011-07-19T13:46:43.527 回答
1

您可以使用 HybridUrlCodingStrategy 来隐藏大量请求,如下所示:

mount(new HybridUrlCodingStrategy("/resetpwd", ResetPasswordPage.class));

然后当点击提交时,假设您没有重定向到新页面,则 url 将从

mysite.com/DocRoot/resetpwd

mysite.com/DocRoot/resetpwd.1

或者,如果您真的希望它是mysite.com/DocRoot/resetpwd/submit,您可以创建一个新的可书签页面,例如 ResetPasswordResult.class,将您的响应页面设置为该页面并将其安装在“/resetpwd/submit”

您可能会查看其他编码策略,看看它们是否更适合您: http ://cwiki.apache.org/WICKET/url-coding-strategies.html

于 2009-12-04T00:44:05.217 回答
0

您可以查看http://day-to-day-stuff.blogspot.com/2008/10/wicket-extreme-consistent-urls.html并尝试将其调整为 Forms。

于 2010-11-19T07:09:59.330 回答