Jsf + mysql - duvida

11 respostas
LPJava

Olá Pessoal,

to tentando fazer uma conexao com o MYSQL usando jsf . nao sei pq os dados do formulario nao estao sendo inseridos no DB. A conexao é estabelecida. Quem puder dar informar o por que nao conseguir. agradeco.

obs.: Adicionei o driver mysql ao projeto.

abraco,

meu bean
public class Cliente {
	private String nome; 
	private String cidade;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCidade() {
		return cidade;
	}
	public void setCidade(String cidade) {
		this.cidade = cidade;
	} 
}
controlador
package br.com.controller;



import br.com.bean.Cliente;
import br.com.dao.ClienteImpDAO;
import br.com.dao.DAO;

public class Controler {
	private Cliente cliente;
	
	private String msgtest;
	
	public String getMsgtest() {
		return msgtest;
	}

	public void setMsgtest(String msgtest) {
		this.msgtest = msgtest;
	}

	public Cliente getCliente() {
		return cliente;
	}

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

	public String salvar(){
		DAO dao = new ClienteImpDAO();
		dao.salvar(cliente);
		
		return "salvar";
	}
	
	public String novo(){
		this.cliente = new Cliente();
		return "novo";
	}
	
	
}
DAO.JAVA
package br.com.dao;

import br.com.bean.Cliente;

public interface DAO {
	public void salvar(Cliente cliente);
}
package br.com.dao;

import java.sql.Connection;
import java.sql.Statement;

import br.com.bean.Cliente;
import br.com.util.Conexao;

public class ClienteImpDAO implements DAO {

	public void salvar(Cliente cliente) {
		Connection con = Conexao.getConnection();
		
		String sql = "";
		
		sql +="insert into cliente(nome,email)";
		sql += "values ('"+ cliente.getNome() + "'," + "'" + cliente.getCidade()+ "');";
		try{
			Statement st  = con.createStatement();
			st.executeUpdate(sql);
		
		}catch (Exception e) {
			
		
		}
	}
		
	

}
conexao.java
package br.com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {

    static String status=""; 

public static Connection getConnection(){
            Connection conn=null; 
try{
   
    Class.forName("com.mysql.jdbc.Driver").newInstance();
   
    String url = "jdbc:mysql://localhost/livraria?user=camilo&password=123";
    conn = DriverManager.getConnection(url);
  
    status = "Connection opened";}
catch (SQLException e) {
    status = e.getMessage(); 
}catch (ClassNotFoundException e) {
    status = e.getMessage();

}catch(Exception e){
    status = e.getMessage();}
return conn;}}

11 Respostas

A

Crie um teste do seu controller e veja se ta inserindo…Como criar teste unitarios?Veja no google. E depois,evite usar DAOS, use hibernate e toplink.Vc economiza um tempo e o codigo fica mais organizado.Eu comecei a trabalhar desta forma também.Mas a manutenção é trabalhosa, com os frameworks de persistencias o tempo de desenvolvimento cai para mais de 3x .

E depois com este codigo n vai inserir nada mesmo…Cada a pagina .jsp ou a interfase para adicionar valores?

LPJava

eh eu fiz isso, agora e funcionou, porem nao sei pq ainda no modelo jee, quando clico no botao cadastrar do form, ele nao está salvando no bd o que foi digitado. =/

A

Poste seu codigo jsp da sua pagina de cadastro.O erro deve estar lá

LPJava
andreihirata:
Poste seu codigo jsp da sua pagina de cadastro.O erro deve estar lá
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
	<head>
		<title></title>
	</head>
	<body>
		<f:view>
			<h:form>
			<h:panelGrid columns="3">
			<f:facet name="header">
			<h:outputText value="Formulario de Cliente" />
			</f:facet>
			<h:outputText value="Nome"/>
			<h:inputText size="15" id="nome" value="#{controle.cliente.nome}" />
			<h:message for="nome" />
			
			<h:outputText value="Cidade" />
			<h:inputText id="cidade" value="#{controle.cliente.cidade}"/>
			 <br/>
			 <h:commandButton value="Cadastrar" action="#{controle.salvar}"/>
			</h:panelGrid>
			</h:form>
		</f:view>
	</body>	
</html>
face-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
 <managed-bean>
  <managed-bean-name>controle</managed-bean-name>
  <managed-bean-class>br.com.controller.Controler</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
 <navigation-rule>
  <from-view-id>/menu.jsp</from-view-id>
  <navigation-case>
   <from-outcome>novo</from-outcome>
   <to-view-id>/formCli.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>
 <navigation-rule>
  <from-view-id>/formCli.jsp</from-view-id>
  <navigation-case>
   <from-outcome>salvar</from-outcome>
   <to-view-id>/salved.jsp</to-view-id>
  </navigation-case>
 </navigation-rule>
</faces-config>
A

Ola.Eu vi seu codigo e está tudo oks.Mas acho que o erro ta na configuração

O arquivo faces-config.xml está correto?

Geralmente o codigo do manage beam fica neles.Segue exemplo

<managed-bean>
        <managed-bean-name>tiposAcaoC</managed-bean-name>
        <managed-bean-class>br.com.sistemajuridicowar.controller.TiposAcaoController</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

Renomeie o arquivo face-web.xml para faces-config.xml

LPJava

opa! eu que digitei errado ta certo meu arquivo faces-config.xml, mas nao faco ideia pq nao ta inserindo. a pagina saved.jsp eh chamada normalmente. assim nao aprece erro de nada, porem nao entendo pq nao adiciona…no bd a informacao digitada.

A

Vc está usando JSF ou Visual JSF?

Pelo que vejo.O código parece estar tudo ok.Verifique se vc colocou todos os jar dos frameworks corretamente.

LPJava

nao to usando o visual JSF nao.
veja a imagem em anexo, todos os .jars.


A

tem como vc postar uma foto do erro? e oq acontece quando vc clica no botao salvar? Lá no seu insert, por acaso nao precisa dar commit?

Estou olhando o codigo por cima…Mas verifique quando vc ta dando o insert se vc esta dando commit. e posta imagem da sua tela de cadastro ae…ae acho q ja sei aonde pode estar o problema

LPJava

essa ai eh eh o form de cadastro.

A questao que nao tem erro, simplesmente o que for digitado nao está sendo armazenado no DB.


A

Olá.Acho que ja achei seu erro.Com mais calma achei um erro Statement st = con.createStatement(); --<<<

Lá no insert

declarar

PreparedStatement ps =null;

Connection con = null;

Depois do insert colocar

o correto seria

con=this.con;

con.prepareStatement(SQL);

OBS: sempre ao terminar de fazer um inser,update,delete sempre finalize

ConnectionFactory.closeConnection(con,ps)

Criado 25 de setembro de 2009
Ultima resposta 29 de set. de 2009
Respostas 11
Participantes 2