我正在尝试在 Glassfish 3.1.2 服务器上使用带有 jsf 2.1 和 Facelets 的 HTML5 文档类型。
我见过很多我们可以用 html5 doctype 替换 xhtml doctype 的地方
<!DOCTYPE html>
并将 xhtml 的 xmlns 留在 -tag 中。在一些论坛上,他们说就是这样。但事实并非如此,至少 Firefox 不同意,因为它将页面呈现为“HTML 专有”而不是 HTML5。
似乎没有一个教程考虑 html 页面文件扩展名?这是浏览器关心的事情吗?我尝试将其从 *.xhtml 更改为 *.html,从 -tag 中删除 xhtml 命名空间,并在 web.xml 中更改
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
至
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.html</param-value>
</context-param>
并为 html 添加了 servlet 映射。这根本不起作用。
好的,然后我将所有内容恢复为默认值(xhtml/facelets),仅替换了 doctype-tag 并删除了引用 xhtml 的 xmlns(从所有文件/模板中)。现在我收到很多警告,例如:
Warning: This page calls for XML namespace declared with prefix li but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix li but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix li but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix body but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix ul but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix form but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix a but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix a but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix a but no taglibrary exists for that namespace.
Warning: This page calls for XML namespace declared with prefix a but no taglibrary exists for that namespace.
好吧,这看起来并不乐观。在 web.xml 中,我将项目阶段从开发更改为生产。
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Production</param-value>
</context-param>
警告消失了,w3c 的验证器说这是有效的 html5。
有人对此有更好的解决方案吗?jsf/facelets 是否要求文件具有扩展名 xhtml?