我正在尝试在另一台计算机上的Apache Tomcat上运行Eclipse JSF项目。
我使用this tutorial创建了一个WAR文件。但是,当我部署WAR并在Firefox中打开Facelet页面时,我仅收到以下错误消息:



这是我第一次尝试在没有Eclipse的情况下运行JSF应用程序。这是怎么引起的,我该如何解决?

我实际上正在尝试打开以下Facelet页面:

<?xml version="1.0" encoding="UTF-8"?>
<ui:composition template="/WEB-INF/templates/template_a.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">
    <ui:define name="title">
        tytol
    </ui:define>
</ui:composition>

最佳答案



当客户端(Web浏览器)出于某种原因将HTTP响应内容解释为text/xml而不是text/html且解析的XML树没有任何XML-stylesheet时,您将在客户端出现此错误。换句话说,由于错误或缺少HTTP响应内容类型,Web浏览器将检索到的HTTP响应内容错误地解析为XML而不是HTML。

对于JSF / Facelets文件,其默认扩展名为.xhtml,如果HTTP请求未调用FacesServlet,则无法依次解析Facelets文件并生成所需的基于HTML的输出,则可能会发生这种情况。 XHTML源代码。然后,Firefox仅基于.xhtml文件扩展名猜测HTTP响应内容类型,该文件扩展名在您的Firefox配置中显然默认解释为text/xml

您需要确保HTTP请求URL(如在浏览器的地址栏中看到的)与Webapp的<url-pattern>中注册的FacesServletweb.xml匹配,以便将其调用并能够基于XHTML生成所需的HTML输出。源代码。如果是*.jsf,那么您需要通过/some.jsf而不是/some.xhtml打开页面。另外,您也可以将<url-pattern>更改为*.xhtml。这样,您就无需摆弄虚拟URL。

也可以看看:

  • JSF Facelets: Sometimes I see the URL is .jsf and sometimes .xhtml. Why?


  • 因此请注意,您实际上不需要XML样式表。这只是Web浏览器在尝试尽最大努力使所检索的HTTP响应内容中具有可呈现性时所做的误解。实际上,它应该已经检索了正确生成的HTML输出,Firefox无疑确切地知道如何处理HTML内容。

    10-01 21:16
    查看更多