[RESOLVIDO] - Ajuda com insert em jsf

18 respostas
A

Olá, estou tentando fazer um insert em jsf, mas problemas aparecem.
1 vejam minhas classes:

meu view ta chamando um metodo controlador, e esse controlador chama um dao(depois vou organizar essa arquitetura)

então é o seguinte, no model Cliente, tem os getset apenas.

Meu controller é um managed bean, e ele chama o dao.

vejam a classe controladora (que é onde o problema aparece)

@ManagedBean(name="ClienteController")
public class ClienteController  {

	 Cliente clientes;
	 
		
	public void insertController() {
		
		ClienteDao cliDao = new ClienteDao();
	 cliDao.insert(clientes);
	 
	}

estou chamando assim na view:

<p:inputText id="rg" value="#{ClienteController.clientes.nomeCliente}" required="true">

a pagina nem carrega, ao tentar carregar da isso:

/pages/cadCliente.xhtml @20,101 value="#{ClienteController.clientes.nomeCliente}": Property ‘clientes’ not found on type br.com.projetos.sisCorp.controller.ClienteController

alguem ajuda?

18 Respostas

ErickRAR

ClienteController tem que ter um get e Set para clientes.

Ps: Se é apenas um cliente, qual o motivo de se chamar clientes? E Quanto tiver uma lista de clientes no seu controller? Vai chamar de clienteses?!

A

[quote=ErickRAR]ClienteController tem que ter um get e Set para clientes.

nao entendi, get set para clientes? eu vou usar eles quando?
passar por parametro no metodo do controller?

ErickRAR

Sim, precisa colocar no controle, caso contrário o xhtml não encontrará a propriedade:

@ManagedBean(name="ClienteController")  
public class ClienteController  {  
  
      Cliente clientes;
      ClienteDao cliDao;     
    
//Get e set para o xhtml saber(?) que a propriedade existe no seu bean.
   public Cliente getClientes(){
        return clientes;
   }
   
  public void setClientes(Cliente clientes){
   this.clientes=clientes;  
}
         
//dica adicional
//Essa anotação "diz" para o JSF que esse método deve ser chamado antes dos outros, assim que o bean for criado.
// Ela garante(melhor que o construtor da classe) que o método será chamado. Use-a para iniciar os objetos, principalmente.
  @PostConstruct   
  public void init(){  
    clientes = new Cliente();
   clienteDAO  = new ClienteDao(); 
  }
 
    public void insertController() {  
         cliDao.insert(clientes);  
    }
A

OK, de certo o erro sumiu, mas agora to com problema no metodo inserir.

eu mudei assim view > controller > model > dao

o controller agora chama um metodo no model, e o model chama o dao.

o problema é que não esta inserindo no banco:

veja meu dão:

[code]

public void insert(Cliente clientes) {
//insert

em.getTransaction().begin();
em.merge(clientes);
em.getTransaction().commit();
closePersistence();

}

lembrando que o em e emf ja foram iniciados no construtor.

A

eu testei esse metodo e esta funcionando.

la no model ficou o metodo que chama o dao, e meu controler so faz chamar o model:

assim

public void insertController() {

cliente.insertCLi(cliente);

}

e la no model cliente, o metodo insertCli chama o dao:
public void insertCLi(Cliente cliente){

ClienteDao cliDao = new ClienteDao();
cliDao.insert(clientes);

}

alguem sabe pq nao esta funcionando?

ErickRAR

Após dar o commit(), você está chamando o método flush() da sessão em algum lugar?
Verifique isso.
coloque também dentro de um try/catch, assim, ao aparecer o erro no console, fica mais fácil saber o motivo.

A

não estou chamando flush.

estou chamando o metodo assim:

<p:commandButton id=“btn” value=“Cadastrar” update=“panel”
ajax=“false” action="#{ClienteController.insertController}" />

ai apenas recarrega a pagina novamente de cadastro., coloquei try catch mas não da pra ver pois ao recarregar a pagina o console aparece as coisas referente a pagina.

ErickRAR

O flush do banco. Para salvar/alterar/excluir algo do banco, o método deve ser algo do tipo:

session = HibernateUtil.getSession();
session.beginTransaction();
session.save(objeto);
session.getTransaction().commit();
session.flush();
session.close();
A

não, so aquilo que mandei mesmo, sempre uso aquele metodo la. é com jpa

A

alguem???

A

não chama o metodo, apenas recarrega a pagina, nao sei pq nao esta chegando no metodo.

ErickRAR

Coloque o seu xhtml

A

So estou trabalhando com os 2 primeiros campos, nome, e rg, são esses que estou tentando fazer o insert.

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core">
<link rel="stylesheet" href="../css/style2.css" />
<ui:decorate template="/templates/padrao.xhtml">
		<ui:define name="centro">
		<div align="left">
			<h:form id="form">
				<p:panel header="Cadastro de Clientes">
					<p:accordionPanel dynamic="true" cache="true">
						<p:tab title="Dados Pessoais">
							<p:panelGrid style="margin-bottom:40px;" styleClass="semBorda">
								<p:row>
									<p:column>
										<h:outputLabel for="firstname" value="Nome Completo:" />
									</p:column>
									<p:column>
										<p:inputText id="firstname" value="#{ClienteController.cliente.nomeCliente}" size="30" />
									</p:column>
									<p:column>
										<h:outputLabel for="surname" value="Rg:*" />
									</p:column>
									<p:column>
										<p:inputText id="rg" value="#{ClienteController.cliente.rgCliente}" />
											
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="web" value="Orgão expeditor" />
									</p:column>
									<p:column>
										<p:inputText id="orgrg" value="" />
									</p:column>
									<p:column>
										<h:outputLabel for="profissaoCliente" value="Profissão:" />
									</p:column>
									<p:column>
										<p:inputText id="profissaoCliente" value="" />
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="rendaCliente" value="Renda:" />
									</p:column>
									<p:column>
										<p:inputText id="rendaCliente" value="" />
									</p:column>
									<p:column>
										<h:outputLabel for="nascimento" value="Data de Nascimento:" />
									</p:column>
									<p:column>
										<p:inputText id="data" value="xx/xx/xxxx" />
									</p:column>

								</p:row>

								<p:row>
									<p:column>
										<h:outputLabel for="empresaCli" value="Empresa:" />
									</p:column>
									<p:column>
										<p:inputText id="empresaCli" value="" />
									</p:column>
									<p:column>
										<h:outputLabel for="foneEmpresa" value="Telefone da Empresa" />
									</p:column>
									<p:column>
										<p:inputText id="foneEmpresa" value="" />
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="cliDesde" value="Cliente desde:" />
									</p:column>
									<p:column>
										<p:inputText id="cliDesde" value="xx/xx/xxxx" />
									</p:column>
								</p:row>
								<p:row>
									<p:column colspan="7">
										<h:outputText value="Tipo de pessoa " />
										<p:selectOneRadio id="options" value="#{formBean.number}">
											<f:selectItem itemLabel="Física" itemValue="1" />
											<f:selectItem itemLabel="Jurídica" itemValue="2" />
										</p:selectOneRadio>
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="cpf2" value="CPF:" />
									</p:column>
									<p:column>
										<p:inputText id="cpf2" value="[CPF removido]" />
									</p:column>
									<p:column>
										<h:outputLabel for="cnpj" value="Cnpj:" />
									</p:column>
									<p:column>
										<p:inputText id="cnpj" value="" />
									</p:column>
								</p:row>
							</p:panelGrid>
						</p:tab>
					</p:accordionPanel>
					<p:accordionPanel dynamic="true" cache="true">
						<p:tab title="Endereço">
							<p:panelGrid style="margin-bottom:40px;" styleClass="semBorda">
								<p:row>
									<p:column>
										<h:outputLabel for="lougradouro" value="Lougradouro:" />
									</p:column>
									<p:column>
										<p:inputText id="lougradouro" value="" size="40" />
									</p:column>
									<p:column>
										<h:outputLabel for="bairro" value="Bairro" />
									</p:column>
									<p:column>
										<p:inputText id="bairro" value="" required="true"
											requiredMessage="false" />
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="cep" value="Cep:" />
									</p:column>
									<p:column>
										<p:inputText id="cep" value="" />
									</p:column>
									<p:column>
										<h:outputLabel for="Cidade" value="Cidade:" />
									</p:column>

									<p:column>
										<p:inputText id="cidade" value="" />
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="complemento" value="Complemento:" />
									</p:column>
									<p:column>
										<p:inputText id="complemento" value="" />
									</p:column>
									<p:column>
										<h:outputLabel for="referencia" value="Referência:" />
									</p:column>
									<p:column>
										<p:inputText id="referencia" value="" />
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputText value="Estado: " />
										<p:selectOneMenu value="#{Estado}">
											<f:selectItems value="Estado.ListarUf" var="g" itemValue="#{g.id}" itemLabel="#{g.sigla}" />
										</p:selectOneMenu>
									</p:column>
								</p:row>
							</p:panelGrid>
						</p:tab>
					</p:accordionPanel>
					<p:accordionPanel dynamic="true" cache="true">
						<p:tab title="Contato">
							<p:panelGrid style="margin-bottom:40px;" styleClass="semBorda">
								<p:row>
									<p:column>
										<h:outputLabel for="cel" value="Celular:" />
									</p:column>
									<p:column>
										<p:inputText id="cel" value="" size="25" />
									</p:column>
									<p:column>
										<h:outputText value="Tipo de Telefone: " />
										<p:selectOneMenu value="">
											<f:selectItem itemLabel="Pessoal" itemValue="0" />
											<f:selectItem itemLabel="Residencial" itemValue="1" />
											<f:selectItem itemLabel="Comercial" itemValue="2" />
										</p:selectOneMenu>
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="fax" value="Fax:" />
									</p:column>
									<p:column>
										<p:inputText id="fax" value="" />
									</p:column>
									<p:column>
										<h:outputLabel for="fone" value="Telefone:" />
									</p:column>
									<p:column>
										<p:inputText id="fone" value="" />
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="ref" value="Referência:" />
									</p:column>
									<p:column>
										<p:inputText id="ref" value="" />
									</p:column>
									<p:column>
										<h:outputLabel for="site" value="Site:" />
									</p:column>
									<p:column>
										<p:inputText id="site" value="" />
									</p:column>
								</p:row>
								<p:row>
									<p:column>
										<h:outputLabel for="email" value="Email:" />
									</p:column>
									<p:column>
										<p:inputText id="email" value="" />
									</p:column>
								</p:row>
							</p:panelGrid>
						</p:tab>
					</p:accordionPanel>
					<div align="center">
						<p:commandButton id="btn" value="Cadastrar" update="panel"
							ajax="false" action="#{ClienteController.insertController}" />
						<p:commandButton id="btn2" value="Editar" update="panel"
							ajax="false" action="#{NavegacaoController.cadCliente}" />
						<p:commandButton id="btn3" value="Apagar" update="panel"
							ajax="false" action="#{NavegacaoController.cadCliente}" />
					</div>
				</p:panel>
			</h:form>
		</div>
	</ui:define>
</ui:decorate>
</html>
ErickRAR

Tire o ajax=“false” do botao e veja se nao tem um form dentro do outro nesse layout.

A

ao remover o ajax, da isso:
Cannot find component with identifier “panel” referenced from “form:btn”.

ErickRAR

Você colocou o botão para atualizar “panel” e não tem nenhum componente com o id=“panel” no seu xhtml.

A

Deu certo man, removi o update panel, deixei o ajax false, e agora foi :slight_smile:
valeu, se eu tiver mais duvidas pra terminar o crud, acho que vou ter vou aproveitar o mesmo topico.
obg :slight_smile:

A

queria saber como faço para inserir dados com 1 formulario, em 2 tabelas .
Ex tabela cliente e contato.

eu sei que se eu fizesse setContato(contato.getFone);

funcionaria, mas isso se fosse declarado assim:

Contato contato;

mas a diferença é que é relação 1 - n, então criei uma lista.

private List contatos;

como fica então?

Criado 7 de fevereiro de 2014
Ultima resposta 10 de fev. de 2014
Respostas 18
Participantes 2