Não funciona os links em um rich:datatable quando ele é filtrado pela categoria

Boa noite to ralando e nada… até essa hora 23:14

Seguinte fiz uma lista(categorias) que quando clica nela seleciona os produtos de uma tabela (rich:datatable) referente aquela categoria. Ok isso funciona.
Mas quando clica em um link da tabela, esse link não funciona.
Coloquei na control um valor fixo para as categoria(ou seja a tabela fica fixa, não muda conforme a categoria) desta forma os links funcionam.

Cheguei a conclusão que quando clico no link de categorias para filtrar a tabela conforme a categoria, que os links não funionam.

Alguém pode me ajudar ?

Atensioamente. Flávio.

<?xml version=“1.0” encoding=“ISO-8859-1”?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=“http://www.w3.org/1999/xhtml
xmlns:h=“http://java.sun.com/jsf/html
xmlns:a4j=“http://richfaces.org/a4j
xmlns:rich=“http://richfaces.org/rich
xmlns:c=“http://java.sun.com/jstl/core
xmlns:f=“http://java.sun.com/jsf/core
xmlns:ui=“http://java.sun.com/jsf/facelets”>

<head>
<link rel=“stylesheet” href=“css/style.css” type=“text/css” />
</head>

<body>
<h:form>
<div id=“fazpedido” >
<div id=“menupedido”>
<rich:panel>
<f:facet name=“header”>Categorias</f:facet>

<ui:repeat value="#{controlerPedido.todasCat}" var=“item” > ********* aqui eu listo as categorias **********

  • <h:commandLink action="#{controlerPedido.imprime}" > <h:outputText value="#{item.nome}" /> <f:param name="id" value="#{item.id}" /> </h:commandLink>
  • </ui:repeat> </rich:panel> </div>

    <div id=“tabelapedido”> ******* essa é a tabela que é filtrada conforme as categorias ************
    <rich:dataTable value="#{controlerPedido.produtosCategoria}" width=“550px;” var=“item” id=“table” >
    <f:facet name=“header”>Produtos</f:facet>
    <rich:column width=“390px” >
    <f:facet name=“header”>Produto</f:facet>
    <h:outputText value="#{item.nome}" />

    <h:outputText value="#{item.descricao}" />
    </rich:column>

    <rich:column width=“50px” >
    <f:facet name=“header”>Quantidade</f:facet>
    <h:inputText style=“width:30px” value="#{controlerPedido.quantidade}" />
    </rich:column>

    <rich:column width=“50px” >
    <f:facet name=“header”>Preço</f:facet>
    <h:outputText value="#{item.preco}" />
    </rich:column>

    <rich:column width=“60px” >
    <h:commandLink action="#{controlerPedido.adicionarProdutoAoPedido}" value=“Inserir” /> ********* Link que nao funciona quando a tabela é filtrada **********
    </rich:column>

    </rich:dataTable>
    </div>

    <div id=“pedido”>
    <rich:dataTable width=“550px;” value="#{controlerPedido.pedido}" id=“tabpedido” var=“item” >
    <f:facet name=“header”>Pedido</f:facet>

    <rich:column width=“350px;” >
    <f:facet name=“header”>Produto</f:facet>
    </rich:column>

    <rich:column width=“50px” >
    <f:facet name=“header”>Quantidade</f:facet>
    </rich:column>

    <rich:column width=“50px” >
    <f:facet name=“header”>Preço</f:facet>
    </rich:column>

    <rich:column width=“50px” >
    <f:facet name=“header”>SubTotal</f:facet>
    </rich:column>

    <rich:column width=“50px” >
    <f:facet name=“header”>Excluir</f:facet>
    </rich:column>

    </rich:dataTable>
    </div>
    </div>
    </h:form>
    </body>
    </html>

    /**
    *
    */
    package controler;

    import java.util.HashMap;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;

    import javax.faces.context.FacesContext;
    import javax.faces.model.DataModel;
    import javax.faces.model.ListDataModel;

    import pedido.Pedido;

    import dao.CategoriaDAO;
    import dao.DAOException;
    import dao.ProdutoDAO;

    import entities.Categoria;
    import entities.Produto;

    /**

    • @author Flavio

    */
    public class ControlerPedido {

    private CategoriaDAO categoriaDAO;
    private ProdutoDAO produtoDAO;
    private DataModel dataModel;
    private Pedido pedido;
    private String quantidade;
    
    public ControlerPedido() {
    	categoriaDAO = new CategoriaDAO();
    	produtoDAO = new ProdutoDAO();
    	pedido = new Pedido();
    }
    
    public void adicionarProdutoAoPedido() {   ******** metodo que quero chamar da tabela  ****************
    	
    
    	String id = (String) FacesContext.getCurrentInstance()
    			.getExternalContext().getRequestParameterMap().get("idproduto");
    	
    	
    	Produto produto = null;
    	 try {
    		 produto =   produtoDAO.findByPK(Integer.parseInt(id));
    	} catch (NumberFormatException e) {
    		// TODO Auto-generated  catch block
    		e.printStackTrace();
    	} catch (DAOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    	
    	
    	
    	System.out.println(produto.getNome());
    	
    	pedido.adicionarAoPedido(produto, Integer.parseInt(quantidade));
    
    }
    
    public void imprime() {
    
    	System.out.println("casilda");
    
    }
    
    public DataModel getPedido() {
    
    	return pedido.listarPedidos();
    }
    
    public DataModel getProdutosCategoria() {
    
    	String id = (String) FacesContext.getCurrentInstance()
    			.getExternalContext().getRequestParameterMap().get("id");
    
    	if (id == null) {
    		id = "0";
    	}
    
    	Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();
    	map.put("idcategoria",  34  );                                                       ******** aqui fixei a categoria ai funciona mas quando fica dinamica nao funciona *****
    	String query = "SELECT p FROM Produto p WHERE p.categoria.id=:idcategoria";
    
    	dataModel = new ListDataModel(produtoDAO.listPesqParam(query, map));
    
    	return dataModel;
    
    }
    
    public List&lt;Categoria&gt; getTodasCat() {
    	List&lt;Categoria&gt; list = null;
    	try {
    		list = categoriaDAO.findAll();
    	} catch (DAOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    	return list;
    }
    
    public String getQuantidade() {
    	return quantidade;
    }
    
    public void setQuantidade(String quantidade) {
    	this.quantidade = quantidade;
    }
    

    }

    Acho que vou ter que mudar meu projeto.

    E fazer de outra forma. Tentei de mil maneiras mas nunca da certo.

    Ou alguém tens a moral ?

    Abraço