大家好我正在学习Vaadin for Java,我创建了一个项目并将其导出为.war到Tomcat webapps文件夹。该项目位于以下路径:
/usr/local/apache-tomcat/apache-tomcat-8.0.15/webapps/project.war
现在我重新启动了Tomcat,在webapps文件夹中,.war被解压缩到/usr/local/apache-tomcat/apache-tomcat-8.0.15/webapps/project.warproject
文件夹。
我的问题是我有一个Vaadin ClassResource应该指向WEB-INF / classes目录中的图像(正如他们在Vaadin书中所说的那样),图像位于这条路径上:
/usr/local/apache-tomcat/apache-tomcat-8.0.15/webapps/project/WEB-INF/classes/image.png
但它没有显示......这是UI类的代码:
public class ImgUI extends UI {
protected void init(VaadinRequest request) {
// initializing the layout object etc...
Resource r = new ClassResource("image.png"); // the image which is inside WEB-INF/classes dir
layout.addComponent(new Image("Class resource image", r));
}
}
如何使用ClassResource显示图像?我知道还有其他方法(使用ThemeResource或FileResource),但我想使用ClassResource和作为Vaadin的书状态 - > https://vaadin.com/book/-/page/application.resources.html:
4.4.3。类加载器资源
ClassResource允许从类路径加载资源 使用Java类加载器。通常,相关的类路径条目是 Web应用程序下的WEB-INF / classes文件夹,其中Java 编译应该编译Java类并从中复制其他文件 源树。
下面的单行示例从中加载图像资源 应用程序包并将其显示在Image组件中。
layout.addComponent(new Image(null,
new ClassResource("smiley.jpg")));
为什么我的情况不起作用?我该怎么办?
感谢您的关注!
答案 0 :(得分:0)
可能是瓦丁书不太准确。 ClassResource
构造函数javadoc写道:
创建新的应用程序资源实例。资源ID相对于使用此资源的组件的UI位置(如果使用LegacyWindow,则相对于应用程序)。
因此,您应该将image.png
放在ImgUI.class
旁边。