如何让JSF渲染符合XHTML 1.0 strict标准?

3

我需要开发一个符合“Stanca法案”(Legge Stanca)的Web应用程序。目前我已经使用了jsf2.0(Mojarra)+primefaces 3.2,但是在使用时出现了验证问题。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

特别是对于一个空表单页面,以下生成的html代码:
<form id="j_idt16" name="j_idt16" method="post" action="/econsob/faces/prova_stanca.xhtml" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="j_idt16" value="j_idt16" />
    <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-8952155502993391596:-7459269746161777412" autocomplete="off" />
</form>

无法通过验证,因为:

  • 表单标签中的属性名称不受 Stanca 法案所需的文档类型支持
  • 文档类型不允许在此处(紧接着表单下方)使用“input”元素
  • doctype 不支持 autocomplete 属性

有解决此问题的方法吗?JSF 生成的页面是否可能不符合 Strict 标准?

1个回答

4

标准的JSF HTML渲染器是按照XHTML 1.0 Transitional设计的。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

不过,您始终可以使用HTML5文档类型。

<!DOCTYPE html>

它比XHTML 1.0 Strict doctype更灵活,但仍然能强制浏览器处于标准模式。

如果你真的打算使用XHTML 1.0 Strict,则需要设置以下上下文参数(仅适用于Mojarra):

<context-param>
    <param-name>com.sun.faces.autoCompleteOffOnViewState</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>com.sun.faces.enableViewStateIdRendering</param-name>
    <param-value>false</param-value>
</context-param>

可以修改相应组件的渲染器,以实现和/或功能。只有当某些过度热心的浏览器通过自动完成手段修改视图状态值时,才会冒出ViewExpiredException异常。


谢谢!不幸的是,问题仍然存在。使用上下文参数,我能够解决自动完成的问题,但前两个项目无法解决,因此文档无法验证。对此有什么想法吗? - maxqua72

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接