我第一次使用以下网址导航到我的应用程序:
... /主页/ 0安培;用户= X
在调试模式下,我看到wicket很好地实例化我的面板等(显然)。
如果我将网址更改为:
... /主页/ 0安培;用户= ý
然后没有任何反应,面板没有重新初始化(对于新用户=>用户x的数据仍然显示)也不是LoadableDetachable - 或其他模型被调用。
但是,如果我将URL更改为:
... /主页/ 1 &安培;用户= Y
然后为用户 y
很好地初始化所有面板如果您将URL更改回
,则更进一步?... /主页/ 0 &安培;用户= ý
然后再次显示用户 x 的数据。
看起来Wicket并不关心URL中的参数是否已经改变以决定是否重新加载组件。 AFAIK在Wicket 1.4中运行良好。我想我理解这种行为背后的逻辑,但我不确定。此外,我想知道如果自定义参数更改以及如何从URL中删除“丑陋”?0(如果可能),如何强制Wicket重新加载?
答案 0 :(得分:5)
这是Wicket的有状态性质。页面实例化一次,解析参数等等。稍后您将不同的参数传递给已经实例化的页面,但这次它的构造函数根本没有被调用,因此PageParameters不会更新。更改为?1向Wicket询问id为1的页面,因为没有这样的Wicket实例化新实例并传递新参数。如果您想要始终拥有最新的请求参数,请使用getRequest()。getRequestParameter(“user”),它将为您提供所需的信息。 有意义吗?
答案 1 :(得分:2)
要修改martin-g的答案:您应该在模型中检索请求参数,并使用request参数检索正确的用户。类似的东西:
setModel(new LoadableDetachableModel<User>(){
public User load() {
String username = getRequest().getRequestParameter("user");
return userservice.byUsername(username);
}
}));
当您需要动态数据时,几乎总是使用模型来解决您的问题。
答案 2 :(得分:0)
我认为您可以使用onRender
或onConfigure