JSF: inconsistências nas chamadas a funções do MB

Olá.

Estou tendo alguns problemas usando o ui:repeat em conjunto com o p:datatable e p:commandLink.

Vou explicar como está minha página:
Tenho um ui:repeat e dentro de cada passada do ui:repeat eu adiciono o p:datatable, em uma coluna deste p:datatable eu adiciono o meu p:commandLink.

Só que quando eu clico no p:commandLink da linha 1 do datatable 2 remove também o item da linha 1 do datatable 1.

Pelo que escovei no código acredito que o mecanismo está entendendo que é o mesmo clique, porque os ID dos componentes clicados ficam iguais.

Tentei gerar IDS únicos para estes componentes mas sem sucesso. Pois quando chamo um getId ele pega para todos os componentes, não chama a função a cada interação do laço.

segue meu código:

<ui:repeat var="astProduto"
		   value="#{assistenciaMB.assistencia.assistenciaProdutos}"
		   varStatus="status"
		   id="repeat">
	<div class="produto">
		<div class="item-prod">
			<h:outputText value="#{astProduto.sequencial}" />
		</div>
		<div class="ref-prod">
			<h:outputText value="#{astProduto.produto.referencia}" />
		</div>
		<div class="nome-prod">
			<h:outputText value="#{astProduto.produto.resumo}" />
		</div>
		<div class="act-prod">
			<p:commandLink title="Adicionar Componente" 
						   update=":frm:formAssistencia" 
						   oncomplete="dlgNovoComponente.show()" 
						   styleClass="adicionar"
						   action="#{assistenciaMB.criarComponente()}">
				<f:setPropertyActionListener value="#{astProduto}" target="#{assistenciaMB.assistenciaProduto}" />
			</p:commandLink>

			<p:commandLink styleClass="excluir" action="#{assistenciaMB.removerProduto()}"
						   update=":frm:formAssistencia"
						   title="Remover produto da Assistência">
				<f:setPropertyActionListener value="#{astProduto}" target="#{assistenciaMB.assistenciaProduto}" />
			</p:commandLink>
		</div>

		<p:dataTable var="astComponente"
					 value="#{astProduto.assistenciaComponentes}" 
					 emptyMessage="Não Existem componentes adicionados para este Produto"
					 styleClass="itens-prod"
					 id="d#{assistenciaMB.uniqid}">
			<p:column headerText="Item">
				<h:outputText value="#{astComponente.sequencial}" />
			</p:column>
			<p:column headerText="Referência">
				<h:outputText value="#{astComponente.componente.referencia}" />
			</p:column>
			<p:column headerText="Produto">
				<h:outputText value="#{astComponente.componente.resumo}" />
			</p:column>
			<p:column headerText="Causa">
				<h:outputText value="#{astComponente.causa.descricao}" />
			</p:column>
			<p:column headerText="Qtd.">
				<h:outputText value="#{astComponente.quantidade}" converter="doubleConverter" />
			</p:column>
			<p:column>
				<p:commandLink styleClass="excluir" 
							   action="#{assistenciaMB.removerComponente()}"
							   update=":frm:formAssistencia"
							   id="linkExcluir">
					<f:setPropertyActionListener value="#{astProduto}" target="#{assistenciaMB.assistenciaProduto}" />
					<f:setPropertyActionListener value="#{astComponente}" target="#{assistenciaMB.novoComponente}" />
				</p:commandLink>

			</p:column>
			<p:column>
				<p:commandLink styleClass="editar"
							   update=":frm:formAssistencia"
							   oncomplete="dlgNovoComponente.show()">
					<f:setPropertyActionListener value="#{astComponente}" target="#{assistenciaMB.novoComponente}" />
				</p:commandLink>
			</p:column>
		</p:dataTable>

	</div>

</ui:repeat>    

Alguem pode me ajudar com isso?

Desde já obrigado.

Mudei o meu código, de ui:repeat para c:forEach isto alterou a forma com que os ids são gerados.
Porém agora estou tendo problema com o p:commandLink que não executa o action e nem passa o parâmetro do f:setPropertyActionListener.