3

次のURLを使用して、初めてアプリケーションに移動します。

... / homepage /?0&user = x

デバッグモードでは、ウィケットがパネルなどをうまくインスタンス化していることがわかります(明らかに)。

URLを次のように変更した場合:

... / homepage /?0&user = y

その後、何も起こりません。パネルは再初期化されず(新しいユーザーの場合=>ユーザーxのデータは引き続き表示されます)、LoadableDetachableまたは他のモデルが呼び出されません。

ただし、URLを次のように変更すると、次のようになります。

... /ホームページ/?1&user = y

次に、すべてのパネルがユーザーyに対して適切に初期化されます

さらに一歩、URLをに戻すと

... /ホームページ/?0&user = y

次に、ユーザーxのデータが再び表示されます。

Wicketは、コンポーネントをリロードするかどうかを決定するためにURLの引数が変更されたことを気にしないようです。AFAIKこれはWicket1.4で正常に機能していました。私はこの振る舞いの背後にある論理を理解していると思いますが、よくわかりません。また、カスタムパラメータが変更された場合にWicketを強制的にリロードする方法と、その「醜い」?0をURLから削除する方法(可能な場合)を知りたいですか?

4

3 に答える 3

5

これがWicketのステートフルな性質です。ページは一度インスタンス化され、パラメータが解析されます。後で、すでにインスタンス化されているページにさまざまなパラメーターを渡しますが、今回はそのコンストラクターがまったく呼び出されないため、PageParametersは更新されません。?1に変更すると、WicketにID 1のページが要求されます。そのようなWicketがないため、新しいインスタンスがインスタンス化され、新しいパラメーターが渡されます。常に最新のリクエストパラメータが必要な場合は、getRequest()。getRequestParameter( "user")を使用して、必要なものを提供します。意味がありますか?

于 2011-11-10T15:34:34.340 に答える
2

martin-gの回答を修正するには、モデル内のリクエストパラメータを取得し、リクエストパラメータを使用して正しいユーザーを取得する必要があります。何かのようなもの:

setModel(new LoadableDetachableModel<User>(){
    public User load() {
        String username = getRequest().getRequestParameter("user");
        return userservice.byUsername(username);
    }
}));

動的データが必要な場合は、ほとんどの場合、モデルを使用して問題を解決します。

于 2011-11-13T08:36:43.747 に答える
0

私はあなたが使うことができると思いますonRenderまたはonConfigure

于 2013-03-28T08:50:15.877 に答える