Paginação PrimeFaces

Bom dia,
sou iniciante com primeFaces, estou ccom um problema no meu dataTable, a paginação aparece, mas quando eu vou para a página seguinte os dados nao atualizam.
segue o código:

<p:dataTable var="prod" value="#{productManager.products}" paginator="true" rows="5" paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15" emptyMessage="Nenhum produto selecionado"> <p:column> <f:facet name="header"> <h:outputText value="ID"/> </f:facet> <h:outputText value="#{prod.id}"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Nome" /> </f:facet> <h:outputText value="#{prod.nome}"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Preço" /> </f:facet> <h:outputText value="#{prod.preco}"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Desconto" /> </f:facet> <h:outputText value="#{prod.desconto}%"/> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Editar produto" /> </f:facet> <p:commandButton value="Editar" ajax="false" action="#{productManager.edit(prod)}" /> </p:column> <p:column> <f:facet name="header"> <h:outputText value="Excluir produto" /> </f:facet> <p:commandButton value="Excluir" ajax="false" action="#{productManager.delete(prod)}" /> </p:column> </p:dataTable>

bean:

package ecommerce.web;

import ecommerce.ejb.CategoriaFacade;
import ecommerce.ejb.ProdutoFacade;
import ecommerce.entity.Categoria;
import ecommerce.entity.Produto;
import ecommerce.util.FacesMsg;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;



/**
 *
 * @author FernandoADM
 */
@Named(value = "productManager")
@SessionScoped
public class ProductManager implements Serializable {
    
    private Produto produto;
    private UploadedFile file;
    private Map categorias;
    private List produtos;
    private String pesqNome;
    private Short pesqCat;
    
    @EJB
    ProdutoFacade produtoFacade;
    
    @EJB
    CategoriaFacade categoriaFacade;

    /** Creates a new instance of ProductManager */
    public ProductManager() {
        produto = new Produto();
        produto.setIdCategoria(new Categoria());   
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }
    
    public void setFile(UploadedFile file){
        this.file = file;
    }
    
    public UploadedFile getFile(){
        return file;
    }
    
    public void handleFileUpload(FileUploadEvent event) {
        setFile(event.getFile());  
        FacesMsg.mensInfo("msg", "Upload completo!");
    }

    public Map getCategorias(){
        categorias = new LinkedHashMap();
        for(Categoria cat: categoriaFacade.findAll())
            categorias.put(cat.getNome(), cat.getId());
        
        return categorias;
    }
    public String pequisar(){        
        if(pesqNome == null || pesqNome.isEmpty()){
            if(pesqCat == (short) -1)
                this.produtos = produtoFacade.findAll();
            else
                this.produtos = (List) categoriaFacade.find(pesqCat).getProdutoCollection();
        } else{
            if(pesqCat == (short) -1)
                this.produtos = (List) produtoFacade.getProductsWithName(pesqNome);
            else
                this.produtos = (List) produtoFacade.getProductsWithNameByCat(pesqNome,
                        categoriaFacade.find(pesqCat));
        }
        return null;
    }
    
    public List<Produto> getProducts(){
        if(produtos == null)
           produtos = produtoFacade.findAll();
        return produtos;
    }
    
    public String save(){
        
        FacesContext context = FacesContext.getCurrentInstance();
        
        ServletContext sc = (ServletContext)context.getExternalContext().getContext();      
        String pathImages = sc.getRealPath("/resources/thumbs");
        
        if(this.file != null){
            produto.setImagem(file.getFileName());
            saveImage(pathImages);  
        }
        
        produto.setUltimoUpdate(new Date());
        produto.setIdCategoria(categoriaFacade.find(produto.getIdCategoria().getId()));
        
        if(produto.getId() == null){           
            produtoFacade.create(produto);
        }
        else{
            produtoFacade.edit(produto);
        }
        newProduct();
        return "showProducts";
    }
    
    private boolean saveImage(String path){
        try{
            FileOutputStream output;
            int size = (int) file.getSize();
            byte buf[] = new byte[size];
            
            InputStream stream = file.getInputstream();
            File fileToSave = new File((new StringBuilder())
                    .append(path).append("/").append(file.getFileName()).toString());
            output = new FileOutputStream(fileToSave);
            
            do
            {
                int count = stream.read(buf, 0, size);
                if(count == -1)
                    break;
                output.write(buf, 0, count);
            } while(true);
            
            file = null;
            return true;
        }catch(Exception ex){
            
        }
        return false;
    }
    
    public  void newProduct(){
        this.produto = new Produto();
        this.produto.setIdCategoria(new Categoria());
        getCategorias();
    }
    
    public String edit(Produto prod){
        this.setProduto(prod);
        return "cadProduto";
    }
    
    public String delete(Produto prod){
        produtoFacade.remove(prod);
        getProducts();
        return null;
    }

    public String getPesqNome() {
        return pesqNome;
    }

    public void setPesqNome(String pesq) {
        this.pesqNome = pesq;
    }

    public Short getPesqCat() {
        return pesqCat;
    }

    public void setPesqCat(Short pesqCat) {
        this.pesqCat = pesqCat;
    }
    
}

obrigado!

Por favor, sempre que for postar código, poste ele entre as tags , ninguém vai ler o código que você postou do jeito que está.

desculpa a falha, atualizado !

Ta errado seu método getProducts() na primeira vez que ele entrar no seu get produtos vai ser null, mas na segunda vez não vai ser null então ele não vai atualizar a lista,
Outro erro você tem um método para pesquisar produtos, mas como seu método getProducts() se a lista de produtos não for null vai buscar todos os produtos ou seja não vai adiantar nada sua pesquisa.

Não recomendaria vc obter a lista no método getProducts(), deixe-o apenas para retornar a lista. Como JSF usa uma árvore de componentes para constituir o layout, o método getProducts, pode ser chamados várias vezes, dentre as fazes do ciclo de vida do JSF, logo, serão feitas várias consultas desnecessárias ao BD.

Sugiro assim:

@ManagedBean
@ViewScoped
public class MyMB {

	private List<Produto> listaProdutos = new ArrayList<Produto>();
	
	public MyMB() {
		loadProducts();
	}
	
	private void loadProducts() {
		listProdutos = produtoBean.getAll();
	}
	
	//getters and setters
}

Se depois de uma ação qualquer precisar recarregar a lista, assim que incluir um outro produto, só realizar uma chamada a loadProducts().