java - 由于某种原因,JSP 文档输出 XML 而不是 HTML

标签 java jsp jsf

好的,我正在尝试设置一个简单的 JSF 应用程序。我正在使用 NetBeans 6.8、Glassfishv3 和 Maven2。我制作了一个 JSP 文档,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<html xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
<f:view>
    <head>
        <title><h:outputText value="#{Welcome.title}"/></title>
    </head>
    <body>
        <h:outputText value="Welcome"/>
    </body>
</f:view>
</html>

问题是,如果我导航到此页面 (http://myHost/myApp/faces/welcome.jspx),它将作为 XML 文档返回,但带有 $ {Welcome.title} 填充值:

<?xml version="1.0" encoding="UTF-8"?>
<html><head><title>Gymix - Welcome</title></head><body>Welcome</body></html>

在 Internet Explorer 中,这看起来就像我打开了一个 XML 文档。在 Google Chrome 中,标题打印在“欢迎”文本旁边,而选项卡上打印的不是标题,而是页面的 URL。

如果我将 JSP 文档更改为普通 JSP 页面(taglibs 而不是 xmlns 等),它就会起作用,并且我会返回正确的页面。关于出了什么问题有什么想法吗?谢谢!

编辑:遗憾的是,没有任何快速修复可以解决此问题,因此我将对此进行更多研究。顺便说一句,我的 pom.xml 具有 jsf-api 和 jsf-impl 依赖项,两者的版本都设置为 1.2_14

最佳答案

除了您需要设置正确的 doctype 的事实之外和 content type为了让浏览器知道如何处理页面,您还应该摆脱老式的 jspx格式和使用 xhtml格式以获得 Java EE 6 附带的 JSF 2.0 和 Facelets 的最大优势。

给定的代码应更改为:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
    <h:head>
        <title>#{welcome.title}</title>
    </h:head>
    <h:body>
        Welcome
    </h:body>
</html>

请注意,包含了 doctype,并且 JSF 2.0/Facelets 将在 <h:head> 的帮助下自动处理正确的内容类型。成分。另请注意缺少 <f:view>标签,Facelets 中不再需要此标签。

您可能还需要重新配置您的 Web 应用程序以利用 JSF 2.0 和 Facelets 的全部功能。要了解有关 JSF 2.0 和 Facelets 的更多信息,我强烈建议您阅读 Java EE 6 tutorial part II chapters 4-9 .

祝你好运。

更新:按照comment of bobince :我要添加一个重要的注释;确实,XML 声明(第一行)会扰乱某些 Web 浏览器的呈现模式(另请参阅上面 doctype 链接后面的站点),但这肯定不是问题。 Facelets 在生成页面的 HTML 期间删除 XML 声明。 XML 声明就在那里,因为 Facelets 需要首先使用基于 XML 的工具来解析页面。我们谈论的是基于组件的 MVC 框架和基于 XML 的模板技术,而不是普通的 HTML 页面;)

关于java - 由于某种原因,JSP 文档输出 XML 而不是 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074792/

相关文章:

java - 从文件中读取数字并检查随机生成

java - 我可以在 Junit 测试中运行 PMD 分析吗?

java - Vlcj视频旋转

java - 如何在jsp标签中包含一个变量?

java - 如何从url中获取参数

java - 我应该如何从托管 bean 内的数据库读取数据?

javascript - 在上下文菜单 PrimeFaces 中右键单击后获取值

java - 使用 hibernate envers 实现分页

java - 如何将jsp中的链接更改为按钮

java - 使用 JSF Facelets 的国际化 (i18n) : Messages in Java-classes