我目前正在努力进入 wicket 并开发了一个小型演示应用程序。现在我想在那个应用程序中显示一个静态图像(更具体地说,这个图像应该添加到一个面板中,然后再添加到主页中)。
这是我到目前为止所拥有的:
1) 应该保存图像的面板的 HTML 代码。没有特定的检票口代码,它应该只包含项目结构中存在的图像。
<html><body>
<wicket:panel>
Just some static text inside the image panel...<br/>
<img src="test.jpg"></img>
</wicket:panel>
</body></html>
该面板称为 ImagePanel,所有三个文件(ImagePanel.java、ImagePanel.html、test.jpg)都位于同一个包中。
2) ImagePanel 的 Java 代码 - 相当短,因为没有什么可做的:
public class ImagePanel extends Panel {
public ImagePanel(String id) {
super(id);
}
}
3)首页的HTML代码:
<html><body>
<div wicket:id="dynamicComponent"></div>
</body></html>
4)主页的Java代码:
public HomePage() {
add(new ImagePanel("dynamicComponent"));
}
请注意以下几点: 实际上,HomePage.java 和 ImagePanel.java 位于不同的 OSGi 项目中。此处简化了 HomePage 的代码,实际上 ImagePanel 是通过服务定位并动态添加的。到目前为止,这有效,我看到了静态文本。但是图像没有加载,我只是得到这个破碎的图像缩略图。
就像我说的,所有三个与 ImagePanel 相关的文件(.java、.html、图片)都位于同一个包中。我可以从主页项目访问面板本身,因为我可以看到静态文本。但我无法显示图像。
我使用的应用程序服务器是 Jetty,从包含主页的项目内部开始。
更新: 我已将问题缩小到以下问题:只要我只在 ImagePanel.html 中显示静态文本,一切正常。只要我想添加图像(即使在下面建议的 wicket:link-tag 内),我最终会遇到以下异常:
[qtp401543768-20] WARN org.apache.wicket.core.util.lang.WicketObjects - Could not resolve class [plugin.ImagePanel]
java.lang.ClassNotFoundException: plugin.ImagePanel
因此,如果没有图像,服务器包能够从 gui 包中加载类并显示静态文本。有了这张图片,我最终得到了同一个类的 ClassNotFoundException。
在这里找到整个堆栈跟踪:堆栈跟踪