1

私のアプリケーションでは、次の URL をマウントします。

this.mountPage("/details/${site}", MerchantDetailPage.class);

したがって、たとえば ../details/anything へのリクエストは、pageparameter: site=anything を持つ MerchantDetailPage のインスタンスを作成します。

MerchantDetailPage のコンストラクター:

public MerchantDetail(final PageParameters parameters) {
    super();

    org.apache.wicket.util.string.StringValue storeParameter = parameters.get("site");
    if (!storeParameter.isEmpty()) {
        this.store = this.service.getStoreByQBonSiteWithCategoriesDescriptionsRegionAndAddress(storeParameter.toString());
    }

    if (store == null) {
        throw new RestartResponseAtInterceptPageException(Application.get().getHomePage());
    }

    // Build the page
    this.createPage(this.store, null);
}

コンストラクターが 4 回呼び出されることに気付くまで、これは正常に機能しているように見えました。掘り下げた後、コンストラクターがパラメーター site=anything で1回呼び出された後、ページ上の3つの画像に対してさらに3回呼び出されたことがわかりました。例えば:

<img wicket:id="store_no_image" src="./images/shop_no_logo_big.png" alt="logo" />

したがって、このリソースに対して、Wicket はこのページも呼び出しますが、パラメーター: site=images を使用します。

その結果、ストアはnull画像のリクエストがホームページにリダイレクトされるようになります => 画像が見つかりません。

なぜこうなった?ページ マウントを介して wicket がリソース要求を処理しようとするのはなぜですか?

いくつかのサイドコメント:

  • MerchantDetailPage には、コードから直接呼び出され、店舗 ID をパラメーターとして受け入れる別のコンストラクターもあります。この場合、問題は発生しません。
  • 画像に絶対 URL を使用すると機能します (画像リクエストの MerchantDetailPage には入りません)。
4

1 に答える 1