Problema - JSF - PrimeFaces

4 respostas
E

Ola pessoal.

Estou com um problema na datatable do prime.

Vou explicar

tenho uma pagina cadastroCliente.xhtml esta pagina tem uma dataTable um um dialog, tenho um form para dataTable e um para o dialog, até ai beleza, dataTable tem uma propriedade “selection” que serve para passar o objeto selecionado para o bean.

PROBLEMA : NÃO ESTA PASSANDO, talvez por ter dois forms , porem se eu deixar só um form da um erro muito loco que fala que o cliente está nulo, em fim, tenho que deixar este dois forms e conseguir alguma forma de fazer funcionar o “selection” da dataTable, vou postar meu código.

cadastroCliente.xhtml

<?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:p="http://primefaces.prime.com.tr/ui"
	xmlns:f="http://java.sun.com/jsf/core">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Cadastro de Clientes</title>
</h:head>
	<h:body>
		<h:form id="frmGridCliente">
			<p:growl id="menssagensCliente"
					 life="3000"/>  
			<p:dataTable widgetVar="dtClientes"
						 var="cliente" 
						 value="#{mbCliente.clientes}" 
						 paginator="true"
						 rows="10" 
						 selection="#{mbCliente.cliente}" 
						 selectionMode="single"
				         onRowSelectUpdate="display" 
				         onRowSelectComplete="dlgCliente.show()"
				         emptyMessage="Nao existe cliente cadastrado"
				         style="width:70%">
	 			<p:column sortBy="#{cliente.id}" 
				          filterBy="#{cliente.id}"
				          style="width:20%">
					<f:facet name="header">
						<h:outputText value="Id" />
					</f:facet>
					<h:outputText value="#{cliente.id}" />
				</p:column>
	 			<p:column sortBy="#{cliente.nome}" 
				          filterBy="#{cliente.nome}">
					<f:facet name="header">
						<h:outputText value="Nome" />
					</f:facet>
					<h:outputText value="#{cliente.nome}" />
				</p:column>
	 			<p:column sortBy="#{cliente.cnpj}" 
					      filterBy="#{cliente.cnpj}">
					<f:facet name="header">
						<h:outputText value="Cnpj" />
					</f:facet>
					<h:outputText value="#{cliente.cnpj}" />
				</p:column>
			</p:dataTable>
			<p:panel style="width:69.2%">
				<p:commandLink title="Novo"
				               oncomplete="dlgCliente.show();"
				               actionListener="#{mbCliente.novo}"
				               update="frmCadastroCliente">
					<p:graphicImage url="/imagens/novo.jpg"
									style="border:0"/>
				</p:commandLink>
				<p:commandLink title="Apagar"
			               action="#{mbCliente.apagar}"
			               style="margin-left:20px"
			               update="frmCliente">
					<p:graphicImage url="/imagens/apagar.jpg"
									style="border:0"/>
				</p:commandLink>
				<p:commandLink title="Voltar"
			      	         action="#{mbCliente.voltar}"
			    	           ajax="false"
			        	       style="margin-left:20px">
					<h:graphicImage url="/imagens/voltar.jpg"
									style="border:0"/>
				</p:commandLink>
			</p:panel>
		</h:form>		
		<h:form id="frmCadastroCliente">
			<p:dialog id="dlgCliente"
					  widgetVar="dlgCliente"
		       		  header="Cliente"
					  width="500">
				<h:panelGrid columns="2" >
					<h:outputLabel value="Id" 
		   			   	           for="itxId" />
					<p:inputText id="itxId"
							     value="#{mbCliente.cliente.id}" 
							     immediate="false"
							     disabled="true"/>
					<h:outputLabel value="Nome" 
		   			   	           for="itxNome" />
					<p:inputText id="itxNome"
							     value="#{mbCliente.cliente.nome}" 
							     size="35"/>
					<h:outputLabel value="CNPJ" 
		   			   	           for="itxCnpj" />
					<p:inputText id="itxCnpj"
							     value="#{mbCliente.cliente.cnpj}"/>
				</h:panelGrid>
				<h:panelGrid columns="3">
					<p:commandLink title="Gravar"
				                   actionListener="#{mbCliente.gravar}"
				                   rendered="#{empty mbCliente.cliente.id}"
				                   update="menssagensCliente, itxId, itxCnpj, itxNome, frmGridCliente">
					<p:graphicImage url="/imagens/gravar.jpg"
									style="border:0"/>
					</p:commandLink>
					<p:commandLink title="Alterar"
				                   actionListener="#{mbCliente.alterar}"
				                   rendered="#{!empty mbCliente.cliente.id}"
				                   update="menssagensCliente, itxId, itxCnpj, itxNome, frmGridCliente">
					<p:graphicImage url="/imagens/alterar.jpg"
									style="border:0"/>
					</p:commandLink>
				</h:panelGrid>
			</p:dialog>
		</h:form>
	</h:body>
</html>

mbCliente

package controladores;


import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

import org.primefaces.event.RowEditEvent;
import org.primefaces.event.SelectEvent;

import negocios.ClienteBO;
import entidades.Cliente;


@ViewScoped
@ManagedBean(name="mbCliente")
public class MBCliente implements Serializable {
	
	private static final long serialVersionUID = 4718957167100835066L;
	private ClienteBO clienteBO;
	public Cliente cliente;
	private List<Cliente> clientes;
		
	
	public MBCliente(){
		this.setClienteBO(new ClienteBO());
	    this.setCliente(new Cliente());
		this.setClientes(new ArrayList<Cliente>());
	}

	public ClienteBO getClienteBO() {
		return clienteBO;
	}

	public void setClienteBO(ClienteBO clienteBO) {
		this.clienteBO = clienteBO;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}
	
	public void novo(ActionEvent evento){
		this.setCliente(new Cliente());
	}
	
	public void gravar(ActionEvent evento){
		try {
			System.out.println(cliente.getNome()+ " mbCliente");
			System.out.println(cliente.getCnpj()+ "mbCliente");				
			this.getClienteBO().gravar(this.getCliente());
			this.getClientes().add(this.getCliente());
			this.setCliente(new Cliente());
			JSFUtil.enviarMenssagemSucesso("Cliente gravado com sucesso");
		} catch (Exception e) {
			JSFUtil.enviarMenssagemErro("Erro ao gravar"+" "+e.getMessage() );
		}
	}
	
	public void alterar(ActionEvent evento) {
		try {
			this.getClienteBO().gravar(this.getCliente());
			this.getClientes().remove(this.getCliente());
			this.getClientes().add(this.getCliente());
			JSFUtil.enviarMenssagemSucesso("Cliente alterado com sucesso");
		} catch (Exception e) {
			JSFUtil.enviarMenssagemErro("Erro ao alterar"+" "+e.getMessage() );
		}
	}

	public void apagar() {
		try {
			System.out.println("apagarr tudo");
			this.getClienteBO().gravar(this.getCliente());
			this.getClientes().remove(this.getCliente());
			JSFUtil.enviarMenssagemSucesso("Cliente apagado com sucesso");
			System.out.println("apagarr tudo");
		} catch (Exception e) {
			JSFUtil.enviarMenssagemErro("Erro ao apagar"+" "+e.getMessage() );
		}
	}
	
	public List<Cliente> listar(){ 
		List<Cliente> clientes = new ArrayList<Cliente>();
		try {
			clientes = this.getClienteBO().listar();
		} catch (Exception e) {
			JSFUtil.enviarMenssagemErro("Erro ao Listar"+" "+e.getMessage() );
		}
		return clientes;
	}
			
	public String voltar(){
		return "index";
	}
}

ClienteBO

package negocios;

import java.io.Serializable;
import java.util.List;

import entidades.Cliente;
import persistencias.DAOGenerico;

public class ClienteBO implements Serializable{

	private static final long serialVersionUID = -2278850225445937254L;
	private DAOGenerico<Cliente> dao;
	
	public ClienteBO(){
		this.setDao(new DAOGenerico<Cliente>());
	}

	public DAOGenerico<Cliente> getDao() {
		return dao;
	}

	public void setDao(DAOGenerico<Cliente> dao) {
		this.dao = dao;
	}
	
	public void gravar(Cliente cliente) throws Exception{
		dao.gravar(cliente);
	}
	
	public void altera(Cliente cliente) throws Exception{
		dao.alterar(cliente);
	}

	public void apagar(Cliente cliente) throws Exception{
		dao.apagar(cliente);
	}
	
	public List<Cliente> listar() throws Exception{
		return dao.listar(Cliente.class);
		
	}


}

Deste já agradeço

4 Respostas

H

Se eu entendi bem o seu problema, o valor do bean selecionado na tabela não vai para o dialog correto?

Se for isso, quando vc dá um onComplete ou o OnRowSelectComplete no seu dataTable, vi que vc dá um show no seu dialog.
Porém, vc precisa também, atualizar o conteúdo do seu dialog.

Isso vc pode resolver colocando um id para o seu PanelGrid que está dentro do dialog e no dataTable, vc dá um “update” no id do PanelGrid.

E

Então, é exatamente isso que eu quero, relamente tenho que atualizar o dialog, porem nem atualizando o que vc falou, não funciona,

H

Cara, tenho um código com um problema, mas que faz exatamente o que vc precisa. Talvez olhando vc descubra solução pro seu caso.

http://www.guj.com.br/java/234756-problema-com-primefaces---dialog-nao-reabre

E

Pessoal ainda não consegui., mesmo vendo o link do nossa amigo.

Ajuda ai

Criado 1 de março de 2011
Ultima resposta 2 de mar. de 2011
Respostas 4
Participantes 2