【问题标题】:JSF: Not Found in ExternalContext as a Resource exceptionJSF:在 ExternalContext 中找不到作为资源异常
【发布时间】:2011-10-09 10:50:42
【问题描述】:

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

请告诉我这里出了什么问题。

【问题讨论】:

    标签: java tomcat jsf-2


    【解决方案1】:

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

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

    【讨论】:

    • 我不确定“WebContent”是什么意思。我正在使用netbeans 7。在项目设置中,我将“网页文件夹”选项设置为“网页目录”。我的新页面位于“web pages dir/jsp/myNewPage.xhtml”中。我应该把它从那里准确地移到哪里?
    • 'WebContent' 是指你的 web 项目和 WAR 文件的根目录,其中包含 WEB-INF 目录和其他 web 资源。我相信鉴于您配置 Netbeans 的方式,它将是“网页目录”。所以,你的 myNewPage.xhtml 文件应该被移动到“web pages dir”目录。
    • 内部.war文件目录排序如下: /WEB-INF/ /jsp/myNewPage.xhtml /resources/css/... /some-old-html-dirs/
    • 好吧,我不确定您的评论格式是否正确,但是 JSF 不允许将 JSP 或 facelets 放在 WEB-INF 目录中。如果您将 facelets 放置在 WAR 的可公开访问的内容中,那么 myNewPage.xhtml 应该在 WAR 的根目录中,而不是在 /jsp 子目录中。
    • 我不知道如何在此处放置换行符。我的意思是 WEb-INF 和我的 /jsp/ 目录处于同一级别,而不是包含在另一个中。
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2012-10-20
    • 2018-10-14
    • 2021-06-02
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多