是否可以告诉 Mojarra 2.2 在生成的 html 页面中呈现哪个 DocType?
它似乎总是呈现以下 HTML5 Doctype:
<!DOCTYPE html>
在我们的 Facelet 模板中,我们使用以下 DocType 声明,并且希望将其保留在生成的 HTML 中:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
模板:
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<ui:insert name="content">Will be replaced</ui:insert>
</h:body>
</html>
内容:
<?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">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
template="/templates/standalone.xhtml">
<ui:define name="content">
<h:panelGroup>
Foo
</h:panelGroup>
</ui:define>
</ui:composition>
结果:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><body>
Foo
</body>
</html>
我使用 GlassFish 4.1 在 Mojarra 2.2.7 和 2.2.12 上进行了尝试。
最佳答案
我在将 JSF 生成的内容后处理为 PDF 格式时遇到了这个错误。我还注意到使用 <h:doctype>
结果生成了两个文档类型。
幸运的是,我的问题是后期处理,我可以使用 String.replace("<!DOCTYPE html>", XHTML_DOCTYPE)
解决这个问题。在 servlet 环境中,您可能必须使用过滤器或包装 HttpServletResponse
动态修改文档类型。或者您可以修复 JSF 实现。这是最有道理的。
关于jsf-2.2 - 如何在 JSF 2.2 中指定目标 DOCTYPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556859/