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?