1

在我的应用程序中,我安装了以下 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 的图像请求)
4

1 回答 1

2

嗯...您的页面位于

/detail/anything

已正确映射到您的商家详细信息页面...

您的图像位于

/detail/images/shop_no_logo_big.png

和类似的,正确映射到您的商家详细信息页面...挂载路径不知道也不关心它是页面请求还是资源请求。值得一提的是,您可能正在使用挂载路径动态创建资源......

因此,解决方案是将您的图像移动到与您的安装路径不匹配的位置。

于 2013-05-13T09:24:44.473 回答