2011-07-20 53 views
0

我現有的應用程序是用某種手工製作的JSP編寫的。它包含一個來自HttpServlet的類,它處理所有請求和它自己的HTML模板語言。我正在嘗試使用常用的JSF模板語法來重寫它。現在我正在嘗試重寫一組頁面。所以,我做了以下內容: 我在web.xml中註冊新的servlet項(類 - javax.faces.webapp.FacesServlet,URL模式 - /jsp/*) ,並把這個代碼在舊的servlet類:JSF:作爲資源異常在ExternalContext中找不到

ExistingServlet::doGet(request, response) 
{ 
    // some old code 
    if(page we are going to is my new page) 
    { 
     RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/myNewPage.xhtml"); 
     dispatcher.forward(request, response); 

     return; 
    } 
} 

但如果我要這個頁面我得到了以下異常:

/myNewPage.xhtml不在的ExternalContext找到的資源

有了這個調用堆棧(最後幾行):

at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:224) 
at com.sun.faces.facelets.impl.DefaultFaceletFactory.resolveURL(DefaultFaceletFactory.java:265) 
at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:201) 
at com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114) 
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:227) 

請告訴我這裏有什麼問題。

回答

4

當你映射FacesServlet的到URL模式/jsp/*,並訪問/jsp/myNewPage.xhtml的頁面,相關ResourceResolver將嘗試與使用ExternalContext路徑/myNewPage.xhtml來查找資源,並反過來ServletContext對象。

這意味着myNewPage.xhtml頁面必須存在於WebContent中,否則將報告錯誤。通過推論,您必須將myNewPage.xhtml頁面放置在WebContent下,或者在您的servlet中使用/jsp/<sub-directory-path>/myNewPage.xhtml URL引用該頁面,其中子目錄路徑指的是WebContent目錄下的目錄路徑。

+0

我不確定你對「WebContent」有什麼意思。我正在使用netbeans 7.在項目設置中,我將「網頁文件夾」選項設置爲「網頁目錄」。我的新網頁位於「網頁目錄/ jsp/myNewPage.xhtml」中。我應該從哪裏移動它? – Ilias

+1

'WebContent'是指您的Web項目和WAR文件的根目錄,其中包含WEB-INF目錄和其他Web資源。我相信,根據你配置Netbeans的方式,這將是「網頁目錄」。所以,你的myNewPage.xhtml文件應該被移到「網頁目錄」目錄。 –

+0

內部排序是這樣的.war文件目錄: /WEB-INF/ /jsp/myNewPage.xhtml /資源/ CSS/... /一些老-HTML的目錄/ – Ilias

相關問題