在我的应用程序中,我安装了以下 URL:
this.mountPage("/details/${site}", MerchantDetailPage.class);
因此,对例如 ../details/anything 的请求将创建一个带有 pageparameter 的 MerchantDetailPage 实例:site=anything。
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,但随后又调用了 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 的图像请求)