JSF:在ExternalContext中找不到作为资源异常

时间:2011-07-20 14:12:11

标签: java tomcat jsf-2

我现有的应用程序是用某种手工编写的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)

请告诉我这里有什么问题。

1 个答案:

答案 0 :(得分:4)

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

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