Это не проблема RichFaces. Это JSF. JSF добавляет уникальный идентификатор для каждого компонента. Это известная функция JSF.
Однако есть кое-что, что вы можете сделать.
В вашем <h:form>
вы можете установить prependId="false"
. Это скажет JSF не добавлять идентификаторы из каждого компонента.
(Также убедитесь, что вы не используете s:decorate="/layout/template.xhtml
, потому что template.xhtml
и edit.xhtml
будут добавлять свои собственные идентификаторы.
Так что сделайте что-то вроде этого:
<h:form prependId="false">
<a4j:repeat value="#{foo}" var="f" rowKeyVar="row">
<h:inputText id="unique#{row}"/>
</a4j:repeat>
</h:form>
Это сделает идентификатор таким: unique1 unique2 unique3 etc
Обновление
Кажется, ты прав. По какой-то причине тег id
не поддерживает этот тип выражения EL.
Я попробовал следующее:
<a:repeat id="table" value="#{foo}" var="k" rowKeyVar="row">
<h:inputText id="test#{row}" value="row is #{row}" styleClass="test#{row}"/><br/>
</a:repeat>
И он генерирует сгенерированный HTML
<input type="text" class="test0" value="row is 0" name="table:0:test" id="table:0:test">
<input type="text" class="test1" value="row is 1" name="table:1:test" id="table:1:test">
<input type="text" class="test2" value="row is 2" name="table:2:test" id="table:2:test">
Итак, как вы можете видеть, я все еще получаю уникальный идентификатор, потому что. Вероятно, добавление номера для меня автоматически.
Не имеет значения, добавляете вы или нет. Результат тот же.