JSF,重复组件 ID,同时从 IceFaces 1.8 迁移到 3.3 [重复]

Posted

技术标签:

【中文标题】JSF,重复组件 ID,同时从 IceFaces 1.8 迁移到 3.3 [重复]【英文标题】:JSF, duplicate component ID, while migrating from IceFaces 1.8 to 3.3 [duplicate] 【发布时间】:2015-02-16 02:57:08 【问题描述】:

我正在开发一个应用程序,我必须将它从 Glassfish v2 迁移到 Glassfish v3。该应用程序基于 IceFaces 框架。为此,我们还在 Icefaces 1.8.2 上切换到 Icefaces 3.3.0

在迁移之前它可以工作,但是现在当我生成数据表时,如果我刷新页面(通过单击应用程序中的按钮)而没有:

再次生成数据表(通过调用请求) 或者用这个 java 代码抑制它:resultatBinding.getChildren().clear();

总而言之,组件数据表在第一次使用时可以正常工作,但是如果我在页面中修改另一个 JSF 组件而不更改数据表,我会得到一个堆栈跟踪,开始于:

2014-12-16T10:27:26.449+0100|Grave: JSF1007 Duplicate component ID form : composite:j_ id123 found in view.
2014-12-16T10:27:26.449+0100|Grave: +id: j_id123

[…]

+id: j_id122
type: com.icesoft.faces.component.ext.UIColumn@76a457d5
+id: j_id123
type: com.icesoft.faces.component.ext.htmlOutputText@1f829dcd
+id: j_id123
type: com.icesoft.faces.component.ext.HtmlOutputText@38460de4
+id: j_id124
type: com.icesoft.faces.component.ext.UIColumn@7f3a1098
+id: j_id125
type: com.icesoft.faces.component.ext.HtmlOutputText@3d17ac69
+id: j_id125

[…]

这就是数据表在 .xhtml 中的声明方式:

 <ice:panelGroup styleClass="iceFrm" style="overflow: auto;width: 802px;max-width: 802px; height: 440px; max-height: 440px;" rendered="#requeteurSql.baseDeDonnees != null">
      <ice:dataTable id="tableau" rendered="#not empty requeteurSql.resultat" value="#requeteurSql.resultat" var="currentRow" rows="#requeteurSql.nbLigneResultat" binding="#requeteurSql.resultatBinding">
           <f:facet name="header">
                <ice:columnGroup>
                     <ice:headerRow binding="#requeteurSql.headerBinding">
                     </ice:headerRow>
           </ice:columnGroup>
           </f:facet>
      </ice:dataTable>
 </ice:panelGroup>

这是无法理解的,因为尽管进行了迁移,但我并没有更改代码的语料库,而且它之前可以正常工作。正如 Icefaces 的文档所建议的,我将注释 @RequestScoped 交换为 @ViewScoped。但是我仍然有我的身份问题。 我觉得这是一种回归,但我不知道如何解决它。是不是我忘了设置一个参数?

有人知道吗?

提前致谢

【问题讨论】:

在 JSF 中,最好始终为 UIInputUICommandUIContainer 组件分配 ID,例如&lt;h:inputText&gt;&lt;h:commandLink&gt;&lt;h:dataTable&gt; 等。对 IceFaces 组件执行类似操作。 【参考方案1】:

我们从 1.8.2 迁移到 3.3 时遇到了同样的问题 问题似乎出现了,然后您使用 binding 将您的组件链接到后端实现。 我真的没有解决办法抱歉。 经过大量调查后,我们不得不以另一种方式重新实现它。

【讨论】:

以上是关于JSF,重复组件 ID,同时从 IceFaces 1.8 迁移到 3.3 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

JSF:使用带有 ICEfaces 的 AJAX 推送 (ICEpush)

ICEfaces/Seam 文件上传组件不上传文件

在一个浏览器中使用带有多个选项卡的 JSF [重复]

JSF、RichFaces、PrimeFaces 和 IceFaces 之间的区别

jsf/icefaces 中的 javascript

为 JSF/ICEfaces 设置浮点格式化语言环境?