Генерация уникальных атрибутов идентификатора в datatable с JSF2 и IceFaces2

Я пытаюсь использовать код, который выглядит так:

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

Я хотел бы иметь другой идентификатор для моих полей формы. Объект ревизии действительно содержит поле "индекс", представляющее индекс объекта в списке. Я хочу видеть, что это появляется в id. Однако ничего не происходит. Выражение #{revision.index} никогда не интерпретируется (getIndex() для объекта ревизии никогда не вызывается).

Вы скажете мне, JSF уже делает что-то похожее на:

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

Правда, но это влияет только на clientId, сгенерированный в HTML. UIComponent, представляющий поля формы (в ViewRoot от FacesContext), имеет все те же "id" и "clientId" (да, событие, если HTML содержит "revisionDocuments:0:revisionSequenceAdresse", "clientId", который вы найдете в ViewRoot, revisionDocuments: revisionSequenceAdresse).

Кто-то может помочь с моей попыткой?

Большое спасибо, любая помощь будет принята с благодарностью.

1 ответ

Решение

Идентификаторы компонентов должны быть определены во время построения представления, а не во время визуализации представления. #{revision} недоступен во время построения представления, поэтому он всегда оценивается как пустой. По сути, вам нужно привязать его к #{agendaBean} или что-то еще, что уже находится в области видимости во время сборки представления. Идентификатор компонента зависит от самого компонента, а не от его сгенерированного вывода HTML. Вы не можете назначить несколько разных идентификаторов физически одному и тому же компоненту.

Но на самом деле вам не нужно возиться с этим подходом. Ваша конкретная проблема, для которой вы думали, что это решение, уже дана в ответе на ваш предыдущий вопрос: JSF2 + IceFaces 2 - Получить UIComponent из ViewRoot.

Другие вопросы по тегам