我的要求如下:如何獲得真實路徑在JSF中SessionListener
信息: ICEfaces的上傳組件,將文件上傳到相對的文件夾,併爲每個用戶創建該文件夾中的子目錄sessionId。
要求:在sessionDestroyed
爲每個用戶,我想獲得真正的路徑,刪除當前的用戶文件夾。
我知道如何與JSF真實路徑如下:
ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance()
.getExternalContext().getContext();
String deploymentDirectoryPath = ctx.getRealPath("/");
問題:如果你試圖獲得sessionDestroyed
真實路徑,你會得到空指針異常,所以我在想,如果有一種方法可以在偵聽器中初始化變量deploymentDirectoryPath
,以便我可以在sessionDestroyed
方法中使用它,或者可以在應用程序啓動時初始化實際路徑變量並在此處使用它?
請指教如何解決這個問題。
我試圖在sessionDestroy下面的代碼,也許這就是問題的ServletContext'CTX =(ServletContext中)FacesContext的。 getCurrentInstance() .getExternalContext()。getContext(); String deploymentDirectoryPath = ctx.getRealPath(「/」);' –
這就是我真正猜測的。這些都是JSF相關的,IMO最好把它們保存在JSF中。 –
在會話銷燬期間,不一定需要'FacesContext',因爲它可以在JSF資源上沒有HTTP請求的情況下執行。所以'getCurrentInstance()'將返回'null'。順便說一句,'ExternalContext'也有一個'getRealPath()'方法。你應該更喜歡使用它。在JSF支持bean內導入'javax.servlet'是一種糟糕的做法。最後但不是最後,當容器被配置爲在內存而不是磁盤上展開WAR時,你應該真的考慮到'getRealPath()'可以返回'null'。如果您沒有100%的管理員控制,則不應使用它。 – BalusC