Wicket 1.5(.2)中未在网址上重新加载的组件会发生变化?

时间:2011-11-10 14:35:21

标签: java wicket wicket-1.5

我第一次使用以下网址导航到我的应用程序:

  

... /主页/ 0安培;用户= X

在调试模式下,我看到wicket很好地实例化我的面板等(显然)。

如果我将网址更改为:

  

... /主页/ 0安培;用户= ý

然后没有任何反应,面板没有重新初始化(对于新用户=>用户x的数据仍然显示)也不是LoadableDetachable - 或其他模型被调用。

但是,如果我将URL更改为:

  

... /主页/ 1 &安培;用户= Y

然后为用户 y

很好地初始化所有面板

如果您将URL更改回

,则更进一步
  ?

... /主页/ 0 &安培;用户= ý

然后再次显示用户 x 的数据。

看起来Wicket并不关心URL中的参数是否已经改变以决定是否重新加载组件。 AFAIK在Wicket 1.4中运行良好。我想我理解这种行为背后的逻辑,但我不确定。此外,我想知道如果自定义参数更改以及如何从URL中删除“丑陋”?0(如果可能),如何强制Wicket重新加载?

3 个答案:

答案 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)

我认为您可以使用onRenderonConfigure