ApacheWicket不加载(或显示)静态图像

ApacheWicket不加载(或显示)静态图像,wicket,Wicket,我目前正在研究wicket,并开发了一个小的演示应用程序。现在我想在该应用程序中显示一个静态图像(更具体地说,这个图像应该添加到一个面板,然后再添加到主页) 这就是我到目前为止所做的: 1) 应包含图像的面板的HTML代码。没有特定的wicket代码,它应该只保存项目结构中存在的图像 <html><body> <wicket:panel> Just some static text inside the image panel...<br/&

我目前正在研究wicket,并开发了一个小的演示应用程序。现在我想在该应用程序中显示一个静态图像(更具体地说,这个图像应该添加到一个面板,然后再添加到主页)

这就是我到目前为止所做的:

1) 应包含图像的面板的HTML代码。没有特定的wicket代码,它应该只保存项目结构中存在的图像

<html><body>
  <wicket:panel>
    Just some static text inside the image panel...<br/>
    <img src="test.jpg"></img>
  </wicket:panel>
</body></html>
3) 主页的HTML代码:

<html><body>
  <div wicket:id="dynamicComponent"></div>
</body></html>
public HomePage() {
    add(new ImagePanel("dynamicComponent"));
}
请注意:实际上,HomePage.java和ImagePanel.java位于不同的OSGi项目中。主页的代码在这里被简化,实际上ImagePanel是通过一个服务定位并动态添加的到目前为止,这是有效的,我看到了静态文本。但是图像没有加载,我只是得到了这个损坏的图像缩略图

正如我所说,所有三个与ImagePanel相关的文件(.java、.html、图片)都位于同一个包中。我可以从主页项目访问面板本身,因为我可以看到静态文本。但我无法显示图像

我使用的应用服务器是Jetty,它从保存主页的项目内部启动

更新: 我已将问题缩小到以下方面: 只要我只在ImagePanel.html中显示静态文本,一切都正常。一旦我想添加图像(即使是在wicket:link标签内,如下所示),我就会遇到以下异常:

[qtp401543768-20] WARN org.apache.wicket.core.util.lang.WicketObjects - Could not resolve class [plugin.ImagePanel]
java.lang.ClassNotFoundException: plugin.ImagePanel
因此,如果没有映像,服务器包就可以从gui包加载类并显示静态文本。对于该图像,我最终得到了同一类的ClassNotFoundException


在这里找到整个堆栈跟踪:

在模板中,放置一个

 <wicket:link>
   <img src="test.jpg"></img>
 </wicket:link>

在模板中,在周围放置一个

 <wicket:link>
   <img src="test.jpg"></img>
 </wicket:link>

谢谢你的帮助,不过与此同时我自己解决了这个问题。这不是唯一的wicket问题,也是OSGi捆绑包设置的一些困难

正如我前面提到的,ImagePanel位于与主页不同的OSGi包中。当所有Wicket库都位于HomePage捆绑包中时,就会出现问题(如果两个捆绑包都使用自己的库,则会出现链接器错误)。因此,在ImagePanel中加载图像时使用了主页捆绑包中的类,这些类现在无法访问图像

我通过在ImagePanel捆绑包中引入一个OSGi服务来解决这个问题,该服务将所有使用的图像作为字节数组传递给HomePage捆绑包。主页捆绑包现在可以访问所有资源,并使用ImagePanel捆绑包再次提供的id将它们注册为
SharedResource


注册后,通过
SharedResourceReference

访问ImagePanel捆绑包中的图像没有问题,谢谢您的帮助,尽管在此期间我自己设法解决了这个问题。这不是唯一的wicket问题,也是OSGi捆绑包设置的一些困难

正如我前面提到的,ImagePanel位于与主页不同的OSGi包中。当所有Wicket库都位于HomePage捆绑包中时,就会出现问题(如果两个捆绑包都使用自己的库,则会出现链接器错误)。因此,在ImagePanel中加载图像时使用了主页捆绑包中的类,这些类现在无法访问图像

我通过在ImagePanel捆绑包中引入一个OSGi服务来解决这个问题,该服务将所有使用的图像作为字节数组传递给HomePage捆绑包。主页捆绑包现在可以访问所有资源,并使用ImagePanel捆绑包再次提供的id将它们注册为
SharedResource


注册后,通过
SharedResourceReference

访问ImagePanel捆绑包中的图像没有问题,我在图像的不同位置尝试过。无论我将图像放在项目结构的何处(与ImagePanel相同的包、ImagePanel项目的默认包、与主页相同的包、主页项目的默认包),我最终都会遇到一个异常:
WicketMessage:rendering component:[TransparentWebMarkupContainer]中的异常[Component id=wicket_link-2]
,由wicket深处的某个NullPointerException引起。如果我尝试相同的方法,请使用“/test.jpg”作为src而不是“test.jpg”,我最终得到了与以前相同的损坏图像缩略图。提供完整堆栈跟踪,可能与此无关。没错,异常的真正原因隐藏在控制台日志中。我更新了上述问题。我可以告诉您,ImagePanel不是标准wicket的一部分。您可能在代码中的某个地方引用了ImagePanel,这取决于你找不到了。你的整个名称空间插件。ImagePanel吗?我在图像的不同位置尝试过。无论我将图像放在项目结构中的什么位置(与ImagePanel相同的包,ImagePanel项目的默认包,与主页相同的包,主页项目的默认包),我以一个异常结束:
WicketMessage:rendering component:[TransparentWebMarkupContainer[component id=wicket_link-2]]
中的异常,该异常是由wicket深处的某个位置的NullPointerException引起的。如果我尝试相同的方法,请使用“/test.jpg”作为src而不是“test.jpg”,我最终得到了与以前相同的损坏图像缩略图。提供完整堆栈跟踪,可能与此无关。没错,异常的真正原因隐藏在控制台日志中。我更新了上述问题。我可以告诉您,ImagePanel不是标准wicket的一部分。您可能在代码中的某个地方引用了ImagePanel,这取决于您缺少什么。您的整个名称空间是plugin.ImagePanel吗?
add(new Image("myImage", new PackageResourceReference(MyClass.class, "test.jpg"));