私のアプリケーションでは、次の 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 には入りません)。