首页 文章

如何让JSF渲染符合XHTML 1.0严格?

提问于
浏览
3

我需要开发一个必须符合“Stanca act”(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 act要求的doctype不支持表单标记中的

  • 属性名称

  • 文档类型不允许元素"input"(在表单下方)
    doctype不支持

  • 属性自动完成

有没有办法解决这个问题?是否有可能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 .

    <!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 .

相关问题