是否有可能告诉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中尝试过它。
答案 0 :(得分:1)
我在将JSF生成的内容后处理成PDF格式时遇到了这个错误。另外我注意到使用<h:doctype>
会导致生成两个doctypes。
幸运的是,我是一个后处理问题,我可以使用String.replace("<!DOCTYPE html>", XHTML_DOCTYPE)
解决问题。在servlet环境中,您可能必须使用过滤器或包装HttpServletResponse
来动态修改doctype。或者你可以修复JSF实现。那将是最有意义的。
答案 1 :(得分:0)
JIRA issue for this 请看这个链接:https://github.com/javaserverfaces/mojarra/issues/2824 它已被关闭,因为这是预期的行为。
“复合页面是您实际使用模板的位置。因此,它是您指定文档类型的最外层文件。因此它定义了将要呈现的文档类型。”
只需在模板中指定DOCTYPE即可