如何生成没有'id'和'autocomplete'属性的javax.faces.ViewState隐藏字段

时间:2011-03-01 08:08:39

标签: jsf xhtml facelets viewstate mojarra

这就是我在输出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的所有内容?

5 个答案:

答案 0 :(得分:3)

请参阅。

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

答案 1 :(得分:2)

如果ID javax.faces.ViewState是一个出现的错误,那么非唯一用途Oracle将无法修复。他们关闭了这些门票。没有解决方法。

答案 2 :(得分:1)

  

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

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

你可以在XHTML 1.0 Transitional上获得更多好运 - 我可以确认MyFaces确实产生了有效的XHTML 1.0 Transitional(一旦你将上下文参数org.apache.myfaces.RENDER_VIEWSTATE_ID设置为false)。

答案 3 :(得分:1)

这个问题有一个解决方案,它是在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页面确实很困难,但至少存在解决此问题的解决方案。

答案 4 :(得分:0)

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

有关详细信息,请参阅this帖子。