Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wicket 带有命名参数的已装入映射器也会接收对图像的请求_Wicket_Wicket 1.6_Wicket 6 - Fatal编程技术网

Wicket 带有命名参数的已装入映射器也会接收对图像的请求

Wicket 带有命名参数的已装入映射器也会接收对图像的请求,wicket,wicket-1.6,wicket-6,Wicket,Wicket 1.6,Wicket 6,在我的应用程序中,我装载以下URL: this.mountPage("/details/${site}", MerchantDetailPage.class); 因此,对instance../details/anything的请求将创建一个带有pageparameter:site=anything的MerchantDetailPage实例 MerchantDetailPage的构造函数: public MerchantDetail(final PageParameters parameters

在我的应用程序中,我装载以下URL:

this.mountPage("/details/${site}", MerchantDetailPage.class);
因此,对instance../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,但对于页面上的3个图像,又调用了3次;e、 g:

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

因此,对于这个资源,Wicket也在调用这个页面,但参数为:site=images

因此,存储为
null
,因此图像请求被重定向到主页=>未找到图像

为什么会这样?为什么wicket试图通过页面装载来处理资源请求

一些附带评论:

  • MerchantDetailPage还有另一个构造函数,它直接从代码中调用,并接受store id作为参数。在这种情况下,不会出现问题
  • 如果我对图像使用绝对URL,则它确实有效(不会为图像请求进入MerchantDetailPage)

    • 嗯。。。您的页面位于

      /detail/anything
      
      已正确映射到您的商户详细信息页面

      您的图像位于

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


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

      Tx,但不知道该怎么做。我帖子中的图像位于
      webapp/images
      中,因此被称为
      /images/shop\u no\u logo\u big.png
      ,因此是相对的。那么把它搬到哪里去呢?我可以通过使用wicket图像组件来解决此图像的问题(因此不再在标记中)。但是,其他两个图像在JavaScript(谷歌地图标记图像)中被引用,因此我不能在那里使用相同的方法。目前,我通过计算(JavaScript)标记图像的绝对URL来解决这个问题。这工作(但不知道为什么),但我认为这是一个肮脏的和临时的解决方案。如果你的图像是在<代码> WebAPP/MIDS,那么相对链接是错误的,因为它是相对于<代码> /细节/任何< /代码>。你到底是什么意思?代码>正确显示图像,以便路径正常。对我来说,这里的问题是Wicket要查找
      /detail/images/shop\u no\u logo\u big.png
      。从哪个baseurl调用时,它会正确显示图像?Wicket没有寻找
      /details/images/和
      上的。浏览器是因为浏览器正在访问位于
      /details
      anything
      资源,您告诉它在
      dot/images/imagename
      查找图像,意思是
      无论您现在在哪里/images/imagename
      。好的,我现在明白您的意思了。今晚我要做一点实验。。。