Paginação PrimeFaces

4 respostas
A

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!

4 Respostas

Rodrigo_Sasaki

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á.

A

desculpa a falha, atualizado !

lucasmadeira

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.

fabiomedeirosf

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().

Criado 21 de maio de 2012
Ultima resposta 21 de mai. de 2012
Respostas 4
Participantes 4