如何控制以Wicket形式提交URL动作?

时间:2009-10-28 22:26:28

标签: java wicket

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

问题在于,尽管表单属于页面,但操作URL不包含页面别名,而是以隐蔽的wicket操作形式创建。 有没有办法调整这种行为,所以链接就像 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);

3 个答案:

答案 0 :(得分:3)

如果您继承StatelessForm而不是Form,则会占用您的一部分。而不是像

那样的东西
  

行动= “MYAPP /检票:接口=:1:eventEditor :: IFormSubmitListener ::”

如果页面包含以可收藏的网址安装的表单,您将获得类似的内容,例如

  

行动= “MYAPP /安装/路径/一些/ PARAMS /检票:接口= 0:eventEditor :: IFormSubmitListener ::”

这会在WebApplication.init()

中使用MixedParamUrlCodingStrategy进行装载

然后,您可以覆盖encodeUrlInHiddenFields()以返回true,这会在action属性中为您提供干净的网址。

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

您可以使用Wicket提供RESTful Web服务,如this blog post中所述。还有一个project on Google code called wicket-rest扩展了这个想法。请注意,这似乎与它一样简单,因为它从不使用基于整个组件的UI构建。

this post的人有一个不同的问题,但它帮助我理解Wicket形式更好一点。

答案 1 :(得分:1)

你可以使用像这样的HybridUrlCodingStrategy隐藏很多请求mumbo jumbo:

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

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

更改

mysite.com/DocRoot/resetpwd

mysite.com/DocRoot/resetpwd.1

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

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

答案 2 :(得分:0)