2014-12-06 69 views
3

大家好我正在學習Vaadin for Java,我創建了一個項目並將它作爲.war導出到Tomcat webapps文件夾。該項目位於此路徑:爲什麼我無法在Tomcat的WEB-INF/classes目錄中看到圖像?

/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 Class Loader從類路徑 加載資源。通常,相關的類路徑條目是 Web應用程序下的WEB-INF/classes文件夾,其中Java 編譯應該編譯Java類並複製源樹中的其他文件 。

下面的單行示例從 應用程序包加載圖像資源,並將其顯示在Image組件中。

layout.addComponent(new Image(null, 
     new ClassResource("smiley.jpg"))); 

爲什麼在我的情況下,它不工作?我該怎麼辦?

感謝您的關注!

回答

0

Vaadin的書可能不是很準確。 ClassResource構造函數javadoc寫道:

創建一個新的應用程序資源實例。資源ID相對於使用此資源的組件的UI的位置(如果使用LegacyWindow,則爲應用程序的位置)。

因此,您應該將image.png放在ImgUI.class旁邊。

+0

你的意思是在包內的ImgUI.class駐留在build/classes中? – tonix 2014-12-07 10:59:01

+0

無論如何,我試圖把圖像放在'build/classes/com/example/projectWhereImgUI.classIsLocated /'中,但我看不到它,有沒有其他可能的解決方案?圖片的名稱是正確的,我已經檢查過了。 – tonix 2014-12-07 11:05:41

+0

@ user3019105奇怪。在我的例子中,這兩個文件('ProgUI.class','image.png')在這裏:e:\ Work \ apache-tomcat-8.0.12 \ webapps \ my-project \ WEB-INF \ classes \ com \ myprog \ main \ base \並且它可以工作。 – Krayo 2014-12-07 11:35:17

相關問題