我有一个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);
答案 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)