Repeat é disparado novamente

Olá pessoal, tenho o seguinte código para index.xhtml


...
<h:form>
	<ui:repeat var="prod" value="#{acaoProduto.produtos}">
		<div>
			#{prod.nome} |
			<h:commandLink action="detalhesProduto" value="Detalhes">
				<f:setPropertyActionListener value="#{prod.cod}" target="#{produtoDetalhes.cod}" />
			</h:commandLink>
		</div>
		</ui:repeat>
	</h:form>
...

o atributo action redireciona para a página “detalhesProduto.xhtml”

E o back bean AcaoProduto:

...
@ManagedBean
@RequestScoped
public class AcaoProduto {
	
	private List<Produto> produtos;
	
	public AcaoProduto() {
		System.out.println(" ---!!!! Construtor !!! ----");
		produtos = new ArrayList<Produto>();
		produtos.add(new Produto(1, "A"));
		produtos.add(new Produto(2,"B"));
		produtos.add(new Produto(3,"C"));
		produtos.add(new Produto(4,"D"));
	}
	
	
	public List<Produto> getProdutos() {
		return produtos;
	}

	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;
	}
}

Problema:
Quando eu clico no commandLink, o ActionProduto é executado novamente, isso é ruim, pois a lista de produtos é preenchida novamente e o desempenho vai pro espaço.

Sei que, quando a página index é acessada pela primeira vez, o ActionProduto é instanciado, o repeat é renderizado e o objeto vai embora. Até aqui, beleza.
Quando eu clico em commandLink, O ActionProduto é instanciado novamente.
Alguém sabe como eu posso resolver?

Acho que é porque seu Objeto é @RequestScoped. A cada nova requisição ele chama seu construtor e cria novamente a lista. Só acho, não entendo como funciona os escopos no JSF.

Abs []

Sim, é verdade Adriano, o @RequestScoped faz isso. Mas quando eu clico no Link, ele deveria redirecionar para a página detalhesProduto.xhtml, que está indicado no “action” do commandLink sem precisar instanciar novamente o Objeto.

<h:commandLink action="detalhesProduto" value="Detalhes">  
           <f:setPropertyActionListener value="#{prod.cod}" target="#{produtoDetalhes.cod}" /> 
</h:commandLink> 

Eu não gostaria de colocar @SessionScoped, pois não é conveniente apenas para exibir um produto.
Com @ViewScoped funcionou, pois não instanciou outro objeto, mas gravar estado é algo muito pesado mesmo, mas talvez seja o único jeito.

OBS: Isso só acontece quando o commandLink está dentro no repeat. Quando está fora, O objeto não é instanciado novamente quando eu clico no Link.