Рассмотрим фиктивный случай:
<h:form id="wrapperForm">
<h:panelGroup id="rowsContainer">
<h:dataTable id="rowsTable" value="#{bean.rows}" var="row" >
<h:column>
<h:commandButton value="Click me to update (#{component.parent.parent.parent.clientId})">
<f:ajax render=":#{component.parent.parent.parent.clientId}" />
</h:commandButton>
</h:column>
</h:dataTable>
</h:panelGroup>
</h:form>
При нажатии кнопки id=rowsContainer
успешно обновляется, как и должно.
Однако, если я добавлю туда ui:repeat
, это произойдет.больше не работает:
<h:form id="wrapperForm">
<ui:repeat id="blocksRepeat" var="block" value="#{bean.blocks}">
<h:panelGroup id="rowsWrapper">
<h:dataTable id="rowsTable" value="#{block.rows}" var="row" >
<h:column>
<h:commandButton value="Click me 2 update (#{component.parent.parent.parent.clientId})">
<f:ajax render=":#{component.parent.parent.parent.clientId}" />
</h:commandButton>
</h:column>
</h:dataTable>
</h:panelGroup>
</ui:repeat>
</h:form>
Вместо этого он получает:
<f:ajax> contains an unknown id ':wrapperForm:blocksRepeat:0:rowsWrapper' - cannot locate it in the context of the component j_idt363
Однако этот компонент действительно существует с этим идентификатором, поэтому EL должен быть в порядке.Каким-то образом ui:repeat
ломает дело.Возможно, он пытается вычислить EL до фактического цикла?
Как вы ссылаетесь на элемент rowsWrapper
из dataTable?
Примечание: я недавно спросил о нечетныхИменование таблицы данных в пользовательском интерфейсе: повтор , что оказалось ошибкой .Эта проблема не должна быть связана с этим, однако, поскольку я обертываю dataTable в PanelGroup, как предложено здесь .