使用JSF2和IceFaces2在数据表中生成唯一ID属性

时间:2011-12-09 10:23:13

标签: jsf-2 uniqueidentifier clientid icefaces-2

我正在尝试使用看起来像的代码:

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

我想为表单字段设置不同的ID。修订对象包含一个“索引”字段,表示List中对象的索引。我想看到它出现在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”是revisionDocuments:revisionSequenceAdresse)

有人可以帮我试试吗?

非常感谢,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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