Problema em Inserir Registro após Atualização em Formúlario JSF

3 respostas
V

Olá Pessoal, tudo bem? Estou desenvolvendo um projeto em JSF, Primefaces, Hibernate e Spring Security!

O que acontece é o seguinte, se eu abro a página, digito os valores no campo e mando gravar, ele grava normalmente.
Se também eu clico no registro da tabela ao qual eu quero alterar e depois clico em salvar, ele dá o update no registro normalmente.
Porém, se eu dou o update e após eu clico em Novo para limpar o formulário para a inserção de um novo registro, ele não limpa e volta o valor antigo.

Os códigos estão abaixo:

<!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:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui">
<h:head>
	<title>Touch Sistema Integrado</title>
	<!-- folha de estilos da aplicacao  -->
	<h:outputStylesheet library="css" name="style.css" />
                
	
</h:head>
<h:body>
	<p:layout fullPage="true">		
		<p:layoutUnit position="north" id="top" resizable="false" closable="false" size="180"
			collapsible="true">			
			<ui:insert name="topo">
				<ui:include src="/topo.xhtml" />
			</ui:insert>
		</p:layoutUnit>

		<p:layoutUnit position="center">			
				<h1>Gerenciador de Clientes</h1>				
				
		<h:form prependId="false" id="gerenciaCliente">
				<h:panelGrid id="infosCliente" columns="2"
					style="margin-bottom:10px">
			
					<h:outputLabel for="idCliente" value="Código:" />
					<h:inputText id="idCliente" value="#{clienteController.cliente.idCliente}" readonly="true" />
					
					<h:outputLabel for="nome" value="Nome:" />
					<h:inputText id="nome" value="#{clienteController.cliente.nome}" />

					<h:outputLabel for="rua" value="Rua:" />
					<h:inputText id="rua" value="#{clienteController.cliente.rua}" />

					<h:outputLabel for="numero" value="Nº:" />
					<h:inputText id="numero"
						value="#{clienteController.cliente.numero}" />

					<h:outputLabel for="bairro" value="Bairro:" />
					<h:inputText id="bairro"
						value="#{clienteController.cliente.bairro}" />

					<h:outputLabel for="cep" value="Cep:" />
					<h:inputText id="cep" value="#{clienteController.cliente.cep}" />

					<h:outputLabel for="cidade" value="Cidade:" />
					<h:inputText id="cidade"
						value="#{clienteController.cliente.cidade}" />

					<h:outputLabel for="estado" value="Estado:" />
					<h:inputText id="estado"
						value="#{clienteController.cliente.estado}" />

					<h:outputLabel for="telefoneResidencial" value="Tel. Residencial:" />
					<h:inputText id="telefoneResidencial"
						value="#{clienteController.cliente.telefoneResidencial}" />

					<h:outputLabel for="telefoneCelular" value="Tel. Celular:" />
					<h:inputText id="telefoneCelular"
						value="#{clienteController.cliente.telefoneCelular}" />

					<h:outputLabel for="email" value="E-mail" />
					<h:inputText id="email" value="#{clienteController.cliente.email}" />	
								
					<p:commandButton value="Novo" type="reset"
					actionListener="#{clienteController.prepararAdicionarCliente}"/>      
					
					<p:commandButton update=":frm_listaCliente:tabela"						
						actionListener="#{clienteController.salvarCliente}"
						value="Salvar" />
						


				</h:panelGrid>
			</h:form>
		
		<h:form prependId="false" id="frm_listaCliente">
			<p:dataTable id="tabela" var="cliente"
				value="#{clienteController.listaClientes}"
				paginator="true" rows="5"                  
                rowsPerPageTemplate="5,10,15"  >
				<p:column>
					<f:facet name="header">
						<h:outputText value="Nome" />
					</f:facet>
					<h:outputText value="#{cliente.nome}" />
				</p:column>
				<p:column>
					<f:facet name="header">
						<h:outputText value="E-mail" />
					</f:facet>
					<h:outputText value="#{cliente.email}" />
				</p:column>
				<p:column>
					<f:facet name="header">
						<h:outputText value="Tel. Resid." />
					</f:facet>
					<h:outputText value="#{cliente.telefoneResidencial}" />
				</p:column>
				<p:column>
					<f:facet name="header">
						<h:outputText value="Tel. Celular" />
					</f:facet>
					<h:outputText value="#{cliente.telefoneCelular}" />
				</p:column>
				<p:column>
					<f:facet name="header">
						<h:outputText value="Cidade" />
					</f:facet>
					<h:outputText value="#{cliente.cidade}" />
				</p:column>
				<p:column>
					<f:facet name="header">
						<h:outputText value="Alterar" />
					</f:facet>
					<p:commandButton
						actionListener="#{clienteController.prepararAlterarCliente}"
						value="Alterar" update=":gerenciaCliente:infosCliente"
						/>
				</p:column>
				<p:column>
					<f:facet name="header">
						<h:outputText value="Excluir" />
					</f:facet>
					<h:commandLink action="#{clienteController.excluirCliente}"
						value="Excluir" />
				</p:column>
			</p:dataTable>
		</h:form>			
		</p:layoutUnit>
	</p:layout>


</h:body>

</html>
Meu MB
package controller;

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

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import model.Cliente;
import Dao.ClienteDao;
import Dao.ClienteDaoImp;

@ManagedBean
@ViewScoped
public class ClienteController implements Serializable {
	private Cliente cliente;
	private DataModel<Cliente> listaClientes;
	
	public ClienteController() {
		// TODO Auto-generated constructor stub		  
		this.cliente = new Cliente();
	}
	public DataModel<Cliente> getListaClientes() {
		List<Cliente> lista = new ClienteDaoImp().list();
		listaClientes = new ListDataModel<Cliente>(lista);
		return listaClientes;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public void prepararAdicionarCliente(ActionEvent actionEvent){		
		this.cliente = new Cliente();		
	}
	
	public void prepararAlterarCliente(ActionEvent actionEvent){
		this.cliente = (Cliente)(listaClientes.getRowData());				
	}
	
	public String excluirCliente(){
		Cliente clienteTemp = (Cliente)(listaClientes.getRowData());
		ClienteDao clienteDao = new ClienteDaoImp();
		clienteDao.remove(clienteTemp);
		return "index";
	}	
		
	public void salvarCliente(ActionEvent actionEvent){		
		ClienteDao clienteDao = new ClienteDaoImp();
		clienteDao.save(cliente);		
	}
	
	
	
	

}

3 Respostas

Hebert_Coelho

Depois de realizar tudo que você fez, você precisa atualizar seu objeto também. Ele fica com os valores da última chamada.

V

Olá jakefrog obrigado pela resposta!
Sou iniciante em JSF e eu não entendi muito bem o que você falou! Qual objeto você está se referindo?

As inserções funcionam normalmente, somente depois que eu altero algum registro é que eu não consigo mais limpar o form!
Com eu chamando o formulario em um modal, o cadastro funciona normalmente, porém eu queria colocá-lo na mesma página da pesquisa!

Hebert_Coelho

Você consegue editar no bando o update também?

Se sim, basta depois que você realizar o update fazer algo do tipopessoaDAO.salvar(pessoa); pessoa = new Pessoa();

Criado 21 de junho de 2012
Ultima resposta 21 de jun. de 2012
Respostas 3
Participantes 2