[RESOLVIDO] Problemas com o componeten p:dataTable (primefaces)

2 respostas
jeffev

Boa noite galera,

Estou com um problema no meu componente .
Tenho um CRUD simples, e após eu inserir ou alterar algum registro o filtro da tabela fica desativado, acredito ter algum problema com o meu update ao inserir ou alterar os dados.

index.xhtml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<p:fieldset legend="Categorias cadastradas">
	<h:form prependId="false">
		<p:commandButton actionListener="#{beanCategoria.prepararNovo}"
			value="Nova categoria!" oncomplete="dialogCadCat.show()"
			update=":centro" />
		<p:dataTable var="cat" value="#{beanCategoria.listarCategorias}"
			id="listaCategorias" rowKey="#{cat.id}"
			filteredValue="#{beanCategoria.filteredCategorias}">

			<f:facet name="header">  
            Lista de Categorias 
        </f:facet>

			<p:column headerText="Cód." id="id" sortBy="#{cat.id}"
				filterBy="#{cat.id}">
				<h:outputText value="#{cat.id}" />
			</p:column>
			<p:column headerText="Descrição" id="descricao"
				sortBy="#{cat.descricao}" filterBy="#{cat.descricao}">
				<h:outputText value="#{cat.descricao}" />
			</p:column>

			<p:column>
				<f:facet name="header">
					<h:outputText value="Alterar" />
				</f:facet>
				<p:commandButton actionListener="#{beanCategoria.prepararAlterar}"
					value="Alterar" oncomplete="dialogCadCat.show()" update=":centro" />
			</p:column>

			<p:column>
				<f:facet name="header">
					<h:outputText value="Excluir" />
				</f:facet>
				<p:commandButton action="#{beanCategoria.excluir}" value="Excluir"
					update=":centro" />
			</p:column>

		</p:dataTable>
	</h:form>
</p:fieldset>

<p:dialog header="Cadastro de Categorias" widgetVar="dialogCadCat"
	resizable="false" modal="true" showEffect="fade" hideEffect="fade">
	<h:form if="frm">
		<h:panelGrid id="infosCat" columns="2" style="margin-bottom:10px">

			<h:outputLabel for="id" value="Cód.:" />
			<h:outputLabel id="id" value="#{beanCategoria.categoria.id}" />

			<h:outputLabel for="descricao" value="Descrição:" />
			<h:inputText id="descricao"
				value="#{beanCategoria.categoria.descricao}" />

			<p:commandButton disable="#{!beanCategoria.novo}"
				oncomplete="dialogCadCat.hide();"
				actionListener="#{beanCategoria.adicionar}" value="Inserir"
				update=":centro" />
			<p:commandButton disable="#{!beanCategoria.edit}"
				oncomplete="dialogCadCat.hide();"
				actionListener="#{beanCategoria.alterar}" value="Alterar"
				update=":centro" />

		</h:panelGrid>
	</h:form>
</p:dialog>

</html>
categorias.xhtml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">

<p:fieldset legend="Categorias cadastradas">
	<h:form prependId="false">
		<p:commandButton actionListener="#{beanCategoria.prepararNovo}"
			value="Nova categoria!" oncomplete="dialogCadCat.show()"
			update=":centro" />
		<p:dataTable var="cat" value="#{beanCategoria.listarCategorias}"
			id="listaCategorias" rowKey="#{cat.id}"
			filteredValue="#{beanCategoria.filteredCategorias}">

			<f:facet name="header">  
            Lista de Categorias 
        </f:facet>

			<p:column headerText="Cód." id="id" sortBy="#{cat.id}"
				filterBy="#{cat.id}">
				<h:outputText value="#{cat.id}" />
			</p:column>
			<p:column headerText="Descrição" id="descricao"
				sortBy="#{cat.descricao}" filterBy="#{cat.descricao}">
				<h:outputText value="#{cat.descricao}" />
			</p:column>

			<p:column>
				<f:facet name="header">
					<h:outputText value="Alterar" />
				</f:facet>
				<p:commandButton actionListener="#{beanCategoria.prepararAlterar}"
					value="Alterar" oncomplete="dialogCadCat.show()" update=":centro" />
			</p:column>

			<p:column>
				<f:facet name="header">
					<h:outputText value="Excluir" />
				</f:facet>
				<p:commandButton action="#{beanCategoria.excluir}" value="Excluir"
					update=":centro" />
			</p:column>

		</p:dataTable>
	</h:form>
</p:fieldset>

<p:dialog header="Cadastro de Categorias" widgetVar="dialogCadCat"
	resizable="false" modal="true" showEffect="fade" hideEffect="fade">
	<h:form if="frm">
		<h:panelGrid id="infosCat" columns="2" style="margin-bottom:10px">

			<h:outputLabel for="id" value="Cód.:" />
			<h:outputLabel id="id" value="#{beanCategoria.categoria.id}" />

			<h:outputLabel for="descricao" value="Descrição:" />
			<h:inputText id="descricao"
				value="#{beanCategoria.categoria.descricao}" />

			<p:commandButton disable="#{!beanCategoria.novo}"
				oncomplete="dialogCadCat.hide();"
				actionListener="#{beanCategoria.adicionar}" value="Inserir"
				update=":centro" />
			<p:commandButton disable="#{!beanCategoria.edit}"
				oncomplete="dialogCadCat.hide();"
				actionListener="#{beanCategoria.alterar}" value="Alterar"
				update=":centro" />

		</h:panelGrid>
	</h:form>
</p:dialog>

</html>
BeanCategorias:
package bean;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import model.Categoria;
import dao.CategoriaDAO;

public class BeanCategoria {
	private Categoria categoria;
	private List<Categoria> categorias, filteredCategorias;
	private DataModel listaCategorias;
	private boolean edit,novo;
	
	public BeanCategoria() {
		this.categoria = new Categoria();
		this.categorias = new ArrayList<Categoria>();
		this.filteredCategorias = new ArrayList<Categoria>();
		novo();
		atualizaCategorias();
	}

	public void atualizaCategorias (){
		this.categorias.clear();
		this.categorias = new CategoriaDAO().getAllCategorias();
	}
	
	public void alterar(){
		try {
			new CategoriaDAO().alterar(categoria);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void excluir(){
		try {
			new CategoriaDAO().excluir((Categoria)(listaCategorias.getRowData()));
			atualizaCategorias();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void adicionar(){
		try {
			new CategoriaDAO().inserir(categoria);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		atualizaCategorias();
		categoria = new Categoria();
	}
	
	public void prepararNovo(){
		this.categoria = new Categoria();
		novo();
	}
	
	public void prepararAlterar(ActionEvent actionEvent){
		this.categoria = (Categoria)(listaCategorias.getRowData());
		edit();
	}
		 
	public DataModel getListarCategorias() {
		List<Categoria> lista = categorias;
		listaCategorias = new ListDataModel(lista);
		return listaCategorias;
	}
	
	public void novo(){
		setNovo(true);
		setEdit(false);
	}
	
	public void edit(){
		setNovo(false);
		setEdit(true);
	}
	
	//getters and setters
	public boolean isEdit() {
		return edit;
	}

	public void setEdit(boolean edit) {
		this.edit = edit;
	}

	public boolean isNovo() {
		return novo;
	}

	public void setNovo(boolean novo) {
		this.novo = novo;
	}
	
	public Categoria getCategoria() {
		return categoria;
	}
	
	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}
	
	public List<Categoria> getFilteredCategorias() {
		return filteredCategorias;
	}

	public void setFilteredCategorias(List<Categoria> filteredCategorias) {
		this.filteredCategorias = filteredCategorias;
	}

	public List<Categoria> getCategorias() {
		return categorias;
	}

	public void setCategorias(List<Categoria> categorias) {
		this.categorias = categorias;
	}

	public BeanCategoria(Categoria categoria, List<Categoria> categorias) {
		super();
		this.categoria = categoria;
		this.categorias = categorias;
	}
	
}

Toda ajuda é bem vinda, agradeço desde já a atenção dispensada.

2 Respostas

jeffev

Realmente fiz alguns testes aqui e isso ocorre por causa do update":centro", porém necessito do mesmo para atualizar a tabela quando for feita alguma inclusão ou alteração.

jeffev

Galera, problema resolvido! :smiley:

Tive arrumar os updates, pois os mesmos estava atualizando todo o meu conteúdo, consegui colocar para atualizar somente a minha tabela.

Vlw!!

Criado 28 de agosto de 2012
Ultima resposta 28 de ago. de 2012
Respostas 2
Participantes 1