【问题标题】:How to produce javax.faces.ViewState hidden field without 'id' and 'autocomplete' attributes如何生成没有“id”和“自动完成”属性的 javax.faces.ViewState 隐藏字段
【发布时间】:2011-07-06 07:55:50
【问题描述】:

这是我在输出 HTML 文档中的内容(由 JSF 2.0/Mojarra 2.0.3 生成):

<input type="hidden" name="javax.faces.ViewState" 
id="javax.faces.ViewState" value="4267906931114993858:-6309146738430577631"
autocomplete="off" />

我的文档应该符合XHTML 1.1,其中autocomplete 属性无效,id 属性在所有表单中重复。如何指示 JSF 生成严格符合 XHTML 的所有内容?

【问题讨论】:

  • 没有严格的 XHTML 1.1 这样的东西。 XHTML 1.0 有 Strict、Transitional 和 Frameset 变体。 XHTML 1.1 只是 XHTML 1.1
  • @David 谢谢,我更正了我的问题

标签: jsf xhtml facelets viewstate mojarra


【解决方案1】:

看。

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

【讨论】:

    【解决方案2】:

    如果 ID javax.faces.ViewState 是一个出现 Oracle 不会修复的错误,则非唯一用途。他们已经关闭了这些票。没有解决方法。

    【讨论】:

    【解决方案3】:

    如何指示JSF生产 一切都严格遵守 XHTML?

    这不是用一个简单的标志“指导”JSF 实现的问题。这是必须不断检查的东西,因此只有在项目认为它很重要时才有可能。 XHTML strict 施加了很多限制,因此一般认为不值得支持 - 请参阅this bug。另请注意,您使用的任何组件库必须支持它。

    使用 XHTML 1.0 Transitional 会更幸运 - 我可以确认 MyFaces 确实生成了有效的 XHTML 1.0 Transitional(一旦将上下文参数 org.apache.myfaces.RENDER_VIEWSTATE_ID 设置为 false)。

    【讨论】:

    • Transitional 无济于事 — autocomplete 不在任何 XHTML 1.x 中
    • @大卫:是的。但即使你摆脱了这一点,我所知道的所有 JSF 实现都会产生很多其他不符合 XHTML Strict 的东西。
    【解决方案4】:

    这个问题有一个解决方案,它是在 JSF 的 1.2_14 版本中创建的。我认为这个问题与 Firefox 在隐藏字段的重置事件(输入类型 = 重置)期间的操作方式有关。存在一个问题,即隐藏字段上的客户端 viewState 获得不一致的状态。这个问题的解决方案是以严格的方式禁用自动完成(这不符合 XHTML)。最有趣的是,直到 1.2_14 几乎每个人都生活在这个潜在的错误中。因此,JSF-RI 实现(Mojarra 项目)允许开发人员使用您可以在 web.xml 中编辑的参数禁用此选项,并且不会再打印此自动完成。

    <context-param>
        <description>Put your description here :)</description>
        <param-name>com.sun.faces.autoCompleteOffOnViewState</param-name>
        <param-value>false</param-value>
    </context-param>
    

    使用像 JSF 这样的基于组件的框架来生成有效的 XHTML 页面确实很困难,但至少存在解决这个问题的方法。

    【讨论】:

      【解决方案5】:

      为 ViewState 隐藏输入字段禁用 autocomplete="off" 不是一个好主意,因为这样 Firefox 不会在页面刷新时刷新 ViewState-Id。这会导致无法使用的 JSF 表单和功能。

      详情请参阅this 帖子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2020-02-06
        • 2010-11-15
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        • 2018-05-03
        相关资源
        最近更新 更多