0

我正在尝试使用如下代码:

<ice:dataTable id="revisionDocuments" value="#{agendaBean.agenda.revisionsDocuments}" var="revision">
    <ice:column>
        <ice:inputText value="#{revision.sequenceAdresse}" id="revisionSequenceAdresse#{revision.index}" />
    </ice:column>

我想为我的表单字段设置不同的 ID。修订对象确实包含一个“索引”字段,表示列表中对象的索引。我想看到它出现在 id 中。然而,什么也没有发生。#{revision.index} 表达式永远不会被解释(修订对象上的 getIndex() 永远不会被调用)。

你会告诉我 JSF 已经做了一些看起来像这样的东西:

revisionDocuments:0:revisionSequenceAdresse
revisionDocuments:1:revisionSequenceAdresse
revisionDocuments:2:revisionSequenceAdresse

没错,但这只会影响 HTML 中生成的 clientId。代表表单字段的 UIComponent(在 FacesContext 的 ViewRoot 中)具有所有相同的“id”和“clientId”(是的,如果 HTML 包含“revisionDocuments:0:revisionSequenceAdresse”,则您将在 ViewRoot 中找到的“clientId”是修订文档:修订序列地址)。

有人可以帮我试试吗?

非常感谢您,任何帮助将不胜感激。

4

1 回答 1

0

组件 ID 将在视图构建时确定,而不是在视图渲染时确定。在#{revision}视图构建期间不可用,因此它总是评估为空。基本上,您需要将其绑定到#{agendaBean}视图构建期间已经在范围内的其他内容。组件 ID 特定于组件本身,而不是其生成的 HTML 输出。您不能将多个不同的 ID 分配给物理上的同一个组件。

但是您实际上不需要摆弄这种方法。您认为这是解决方案的具体问题已在您之前的问题中得到解答:JSF2 + IceFaces 2 - Retrieve UIComponent from ViewRoot

于 2011-12-09T13:37:46.563 回答