【问题标题】:How to let JSF render conform XHTML 1.0 strict?如何让 JSF 渲染符合 XHTML 1.0 严格?
【发布时间】:2012-02-29 17:12:49
【问题描述】:

我需要开发一个必须符合“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>

没有通过验证,因为:

  • 所需的文档类型不支持表单标记中的属性名称 通过斯坦卡法案
  • 文档类型不允许在此处输入元素(就在 表格)
  • 文档类型不支持属性自动完成

有没有办法解决这个问题? jsf 生成的页面是否可能无法使用 Strict 进行验证?

【问题讨论】:

    标签: jsf jsf-2 doctype xhtml-1.0-strict


    【解决方案1】:

    标准的 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>
    

    和/或修改相应组件的渲染器。每当某些过度热心的浏览器通过某种自动完成方式修改视图状态值时,您只会冒ViewExpiredExceptions 的风险。

    【讨论】:

    • 谢谢!不幸的是,问题仍然存在。使用上下文参数,我能够解决自动完成问题,但不能解决前两项,因此 cocument 无法验证。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多