xhtml - 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。
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 会更好。
推荐阅读
- axlsx - caxlsx / axlsx 数据透视表在单独的工作表上
- python - Django - 过滤具有大于限制值的字段的对象
- dart - Dart 可选参数为空类型
- ruby - Ruby 2.7 和 3.0 分叉内存消耗
- clonezilla - OCS_Prerun 参数在新 SSD 设置上失败
- javascript - 获取其类中元素的索引
- sed - sed:仅在包含单词 z 的行上将所有出现的单词 X 替换为 Y
- javascript - 如果我们在网页上有多个表单,action 属性的值应该是多少?
- junit5 - 如何使用 assertThrows
- html - 这在 chrome 开发者工具中意味着什么