2011-12-27 45 views
1

我真的不知道這是否是Netbeans問題,但這裏的問題: 在我的jsf web應用程序的根目錄中,我有一個名爲資源的文件夾,其中包含子文件夾圖像,CSS和JS(對於JavaScript)。子文件夾包含相應的內容。以下是我在應用程序中引用腳本(舉例):我的jsf應用程序的資源文件夾中的圖像被刪除,當我「清潔和構建」

<h:outputScript library="js" target="head" name="dialog.js"/> 

問題是,當我清理和建設,同時在CSS目錄和js目錄中的文件仍保持不變,在所有圖像圖像目錄被刪除。那我怎麼能使用jsf資源機制,如果它會在每次「清理和構建」時清除我的圖像?

回答

1

JSF不這樣做。這是服務器這樣做。此問題表明您正在手動將(上傳的?)圖像存儲在展開的WAR文件夾中,而不是其中的某處。 「清理和重建」只是清理服務器的工作文件夾和舊的擴展WAR,並根據原始WAR(實質上是在開發時,項目結構)重新構建Web應用程序。這種方式不僅在開發過程中發生,而且在重新部署新的WAR文件時也會在生產中發生。

此行爲是由規範。您應該不要手動將文件放入展開的WAR文件夾中,並期望它們奇蹟般地包含在原始WAR文件中,或保留在重新部署中。

將它們存儲在WAR以外的固定和永久位置。如果將外部路徑作爲新的上下文添加到服務器,則可以通過<img><h:graphicImage value>通常的方式引用它們。 另請參閱Load images from outside of webapps/webcontext/deploy folder using <h:graphicImage> or <img> tag

如果你真的需要讓他們由JSF資源處理程序來解決,這樣就可以像<h:graphicImage library="uploads" name="foo.png>的東西使用它們,那麼你需要實現自定義ResourceHandler。它看起來像這樣:

public class UploadedResourceHandler extends ResourceHandlerWrapper { 

    private ResourceHandler wrapped; 

    public MyResourceHandler(ResourceHandler wrapped) { 
     this.wrapped = wrapped; 
    } 

    @Override 
    public ResourceHandler getWrapped() { 
     return this.wrapped; 
    } 

    @Override 
    public Resource createResource(String resourceName, String libraryName) { 
     if ("uploads".equals(libraryName)) { 
      return new YourCustomUploadedResourceImpl(resourceName); 
     } else { 
      return super.createResource(resourceName, libraryName); 
     } 
    } 

} 

得到它的運行,如faces-config.xml如下注冊它:

<application> 
    <resource-handler>com.example.UploadedResourceHandler</resource-handler> 
</application> 

但是,這是不完全瑣碎總結過頭頂在一個單一的答案。您還需要了解HTTP(緩存)如何工作。剛剛閱讀javadocs,從ResourceHandler開始,並瀏覽Mojarra自己的ResourceHandlerImplResourceImpl源代碼以獲得此主意。

+0

我的我! BalusC,你是一個傳奇!真的,你是如何得到這麼好的? – Emmanuel 2012-08-29 12:14:41

+0

多年經驗:) – BalusC 2012-08-29 12:46:28

+0

或許。但是,請原諒我,我不得不堅持還有更多。你只有'34'(你的個人資料說),所以隨着對這些技術的深入瞭解 - 一些暗示你閱讀技術規範,而我們大多數人使用教科書 - 很明顯,有超過「年」它。 61,099個人資料視圖說我不是唯一一個這麼認爲的人。你是我希望在工作崗位上工作的那種人。我會'吸'所有我可以離開你:-)希望我知道這個祕密。真的很希望。也許你應該寫一些東西來幫助像我這樣的人試圖得到壞蛋。 – Emmanuel 2012-08-29 16:21:49

相關問題