JSF:在ExternalContext中没有发现资源异常



我有一个用某种手工制作的JSP编写的现有应用程序。它包含一个从HttpServlet派生的类来处理所有请求和它自己的HTML模板语言。我正在尝试使用常见的JSF模板语法重写它。现在我正试着重写一组页面。所以我做了以下的事情:我在web.xml中注册了新的servlet条目(类- javax.faces.webapp.FacesServlet, url模式- /jsp/*)并将此代码放入旧的servlet类中:

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)

当您将FacesServlet映射到URL模式/jsp/*,并访问页面/jsp/myNewPage.xhtml时,关联的ResourceResolver将尝试使用ExternalContextServletContext对象查找路径/myNewPage.xhtml的资源。

这意味着myNewPage.xhtml页必须出现在WebContent中,否则将报告一个错误。由此推断,您必须将myNewPage.xhtml页面放在WebContent下,或者在servlet中使用/jsp/<sub-directory-path>/myNewPage.xhtml URL引用该页面,其中子目录路径引用WebContent目录下的目录路径。

最新更新