考虑一个重定向到另一个页面的Wicket WebPage(基于此处省略的一些逻辑):
public class SomePage extends WebPage {
public SomePage(PageParameters parameters) {
setResponsePage(AnotherPage.class);
setRedirect(true);
}
}
我需要将PageParameters传递给其他页面,这似乎是这样做的方法:
setResponsePage(new AnotherPage(parameters));
但是,在创建这样的新Page对象时,我最终会使用/?wicket:interface=:1::::
之类的网址,而不是干净的/another
。 AnotherPage定义为:
@MountPath(path = "another")
public class AnotherPage extends WebPage {
// ...
}
(其中MountPath来自org.wicketstuff.annotation.mount包。)
所以,我的问题是:
嘿,结果任何建议的方法都有效,也我最初尝试的内容 - setResponsePage(new AnotherPage(parameters))
- 只要我删除setRedirect(true)
}。在这种情况下,URL确实保持不变(SomePage的路径),并且我刚刚意识到我真的应该从一开始就提到过,如果它确实没问题(只要它“非常”并且参数传递)!
页面(“SomePage”)基于查询参数将请求分派给几个看起来不同但通过相同URL访问的可能结果页面。我试图尽可能地将问题表述为通用和极简主义,但是当我遗漏相关信息时,这就出错了。 : - /
对不起,如果这对别人来说很奇怪,不清楚或无用。如果您有关于重命名的建议,请随时发表评论。
答案 0 :(得分:5)
seanizer有正确的想法,但为了完整起见,除BookmarkablePageRequestTargetUrlCodingStrategy
和HybridUrlCodingStrategy
之外还有更多选项:
答案 1 :(得分:4)
我认为this reference page上的关键词是:
下一步是确定要使用的URL编码策略。除非指定了一个表达式,否则使用的默认值为
BookmarkablePageRequestTargetUrlCodingStrategy
。在上面的示例中,“条款”页面使用默认值。
我认为您需要安装其他网址编码策略,可能类似于HybridUrlCodingStrategy
。
编辑:您可能只需要添加此注释即可:
@MountMixedParam(parameterNames={"param1", "param2"})
答案 2 :(得分:3)
也许Component中的其他setResponsePage方法更接近你想要的东西:
/**
* Sets the page class and its parameters that will respond to this request
*
* @param <C>
*
* @param cls
* The response page class
* @param parameters
* The parameters for this bookmarkable page.
* @see RequestCycle#setResponsePage(Class, PageParameters)
*/
public final <C extends Page> void setResponsePage(final Class<C> cls, PageParameters parameters)
{
getRequestCycle().setResponsePage(cls, parameters);
}
答案 3 :(得分:1)
我已成功使用onClick处理程序中的这个,但还不确定它是否也可以从构造函数中运行:
getRequestCycle().setRequestTarget(new BookmarkablePageRequestTarget(ReportPage.class, params));