首页 > 解决方案 > xhtml 的错误

问题描述

我开始学习 xhtml,因为它是我正在阅读的书中的第一个主题,并尝试创建一个简单的表单来输入名称。这是我从书中复制的内容的一半,仅保留输入文本字段:

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

<head>
  <title>Enter Customer Name</title>
</head>

<body> 
  <h:outputStylesheet library="css" name="styles.css"/>
  <h:messages/>
  <h:form id="test">
     <h:outputLabel for="firstname" value="first name:"></h:outputLabel>
     <h:inputText id="firstname" label="first name" value="#{test.firstname}" required="true">
     <f:validateLength minimum="2" maximum="10">
     </f:validateLength>
     </h:inputText>
   </h:form>   
</body>
</html>

但是当我在浏览器中打开它时,这就是我得到的

输出

我究竟做错了什么?

标签: xhtml

解决方案


您的文档不是 XHTML。

Doctype 声称它是,但是你有一堆错误和非 XHTML 内容。

浏览器以 XML 模式解析文档,如果您实际上是在编写 XHTML,这是一个很好的第一步。

正如评论中指出的那样:

xmlns 属性不正常。应该是"http://www.w3.org/1999/xhtml"而不是"http://w3.org/1999/xhtml"

由于您弄错了,您的默认命名空间不会被识别为 XHTML,并且浏览器会将其视为未知的 XML 格式,无需特殊处理。这就是您查看 XML 节点树的原因。

当您更正它时,您的文档开始被解析为 XHTML。

现在我得到的只是一个空白屏幕

这是因为您拥有的唯一 XHTML 元素是根元素、thehead及其后代,以及body.

其他所有内容(例如h:form)都不是 XHTML。您已经从命名空间导入了它http://java.sun.com/jsf/html(除了那些从http://java.sun.com/jsf/core命名空间导入的部分)。(请注意,您选择的 Doctype 禁止这样做)。

Web 浏览器不知道如何处理这些命名空间中的元素,因此它们被插入到 DOM 中但不被渲染。

您需要:

  • 确定这些元素是为使用而设计的工具,并使用该工具而不是 Web 浏览器。(该工具可能会输出可用于 Web 浏览器的代码)。
  • 使用设计用于 Web 浏览器的语言编写代码。这可能是真正的 XHTML,但它的好处只适用于罕见的边缘情况,几乎可以肯定,编写 HTML 会更好。

推荐阅读