我第一次使用以下 URL 导航到我的应用程序:
.../homepage/?0&user=x
在 Debug模式下,我看到 wicket 很好地实例化了我的面板等(很明显)。
如果我将 URL 更改为:
.../homepage/?0&user=y
然后什么也没有发生,面板没有重新初始化(对于新用户 => 用户 x 的数据仍然显示)也没有 LoadableDetachable - 或调用其他模型。
但是,如果我将 URL 更改为:
.../homepage/?1&user=y
然后所有面板都很好地为用户 y
初始化更进一步,如果您将 URL 改回
.../homepage/?0&user=y
然后再次显示用户 x 的数据。
Wicket 似乎并不关心 URL 中的参数是否已更改来决定是否重新加载组件。据我所知,这在 Wicket 1.4 中运行良好。我想我理解这种行为背后的逻辑,但不确定。另外,我想知道如何在自定义参数更改时强制 Wicket 重新加载,以及如何从 URL 中删除“丑陋的”?0(如果可能)?
最佳答案
这就是 Wicket 的状态特性。页面被实例化一次,参数被解析等等。稍后您将不同的参数传递给已经实例化的页面,但这次它的构造函数根本没有被调用,因此 PageParameters 也没有更新。更改为 ?1 会向 Wicket 询问 ID 为 1 的页面,因为没有这样的 Wicket 实例化一个新实例并传递新参数。如果您想始终拥有最新的请求参数,请使用 getRequest().getRequestParameter("user") ,这将为您提供所需的信息。 有道理吗?
关于java - Wicket 1.5(.2) 中的 url 更改时组件未重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8081143/