[RESOLVIDO]Salvar no Banco de Dados com Managed Bean

[i]Olá a todos, estou fazendo uma aplicação com componentes JSF, e eusando o Managed Bean, e quero que quando o usuário clicar no botão “salvar” atraves do managed
Faces-config.xml:

<navigation-rule> <from-view-id>CadastraUsuario.jsp</from-view-id> <navigation-case> <from-outcome>salvar</from-outcome> <to-view-id>br.com.meuProjeto.dao.CadastroDao.java</to-view-id> </navigation-case> </navigation-rule>
O metodo para salvar:[code]package br.com.meuProjeto.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.com.meuProjeto.Conexao.ConectaraoBanco;
import br.com.meuProjeto.Mb.*;

public class CadastroDao {
private Connection getcon;

public CadastroDao() {
	this.getcon = new ConectaraoBanco().getCon();
}

public void Salvar() throws SQLException {
	String sql = "insert into cadastrousuario (nome,email,endereco,telefone) values(?,?,?,?)";
	Connection getCon = new ConectaraoBanco().getCon();
	CadastroMB mb = new CadastroMB();
	PreparedStatement stmt = getCon.prepareStatement(sql);
	stmt.setString(1, mb.getNome());
	stmt.setString(2, mb.getMail());
	stmt.setString(3, mb.getEndereco());
	stmt.setString(4, mb.getTelefone());
	stmt.execute();
	stmt.close();
	getCon.close();
}

}
[/code]
Não sei se o mapeamento do metodo esta certo, pos já vi que pode-se retornar uma String para o MB, mas não entendi como.
Já fiz os Getters e Setters e toda a configuração.
Eu basicamente quero que o botão “salvar” grave no banco de dados usando o managed bean, sei que esta acao pode ser feita sem os mesmos, mas já fiz de outras formas agora quero treinar o uso do Managed Bean!
Alguém em ajuda ?
Obrigado!

Camarada, acho que você está meio (muito, na verdade) confuso.
Você não precisa configurar a DAO na navigation rule, apenas instanciá-lo no MB já permite que seja feita a inserção, chamando o método correspondente, dentro da action do botão referido.

Segue umas dicas…

  1. Antes de usar JSF, leia um livro ou um tutorial que vc vai resolver questões básicas como esta de navegação.
    <to-view-id>br.com.meuProjeto.dao.CadastroDao.java</to-view-id> Não se manda para a arquivo java…aqui vc tem que colocar a pagina JSF.
  2. Não se abre conexão no ação do botão…imagina esse sistema web com 500 pessoas fazendo isso ao mesmo tempo? usamos a estrategia de pool conhecido como DataSource.
  3. Não se joga exception no metod da ação do bean - public void Salvar() throws SQLException { Oque o JSF vai fazer com isso?
    Vc tem tratar os erros das operações dentro do metodo e gerar uma mensagem de erro apropriada na pagina JSF se acontecer algo de errado.
  4. Vc fez muitas perguntas ao mesmo tempo…seria interessante vc criar um post para cada pergunta.

[quote=FernandoFranzini]Segue umas dicas…

  1. Antes de usar JSF, leia um livro ou um tutorial que vc vai resolver questões básicas como esta de navegação.
    <to-view-id>br.com.meuProjeto.dao.CadastroDao.java</to-view-id> Não se manda para a arquivo java…aqui vc tem que colocar a pagina JSF.
  2. Não se abre conexão no ação do botão…imagina esse sistema web com 500 pessoas fazendo isso ao mesmo tempo? usamos a estrategia de pool conhecido como DataSource.
  3. Não se joga exception no metod da ação do bean - public void Salvar() throws SQLException { Oque o JSF vai fazer com isso?
    Vc tem tratar os erros das operações dentro do metodo e gerar uma mensagem de erro apropriada na pagina JSF se acontecer algo de errado.
  4. Vc fez muitas perguntas ao mesmo tempo…seria interessante vc criar um post para cada pergunta.[/quote]

Nossa Fernando desculpa ai por essas mancadas, que erros absurdos, mas tinha visto a pouco tempo sobre Managed Bean e talz, mas agora configurei corretamente e no lugar de mapear uma classe mapeei uma página jsf por testes e funcionou, vi também que preciso de mais organização, meus codigos estavam muito juntos e isso me atrapalhava também. Uma ultima observação, no meu pacote model tem todos os getters e setters, no pacote dao a inserção no banco, no Managed Beanas ações que a página irá realizar, aprendi que a pagina só se relaciona com o MAnaged Bean(certo?) e o MB lida com o resto da operação.
Ultima pergunta, para conseguir gravar eu extendi minha classe model para classe MB, para conseguir fazer os getters e setters, está corretto, ou não, se não qual a melhor forma?
segue o meu código arrumado:
Meu Managed Bean:

[code]package br.com.rapha.mb;

import java.sql.SQLException;

import br.com.rapha.dao.CadClienteDao;
import br.com.rapha.model.CadClienteModel;

public class CadClienteMB extends CadClienteModel {
public String inserir() throws SQLException, ClassNotFoundException {
CadClienteDao dao = new CadClienteDao();
dao.inserir(getNome(), getTelefone(), getEndereco(), getRg());
return null;
}
}
[/code]
Meu Model:


package br.com.rapha.model;//aqui ficam apenas os getters e setters 

import java.io.Serializable;
import java.sql.SQLException;

import br.com.rapha.dao.CadClienteDao;

public class CadClienteModel implements Serializable {
	private String nome;
	private String telefone;
	private String endereco;
	private String rg;
	Integer id;

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}


}

E a DAO:

[code]package br.com.rapha.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.com.rapha.connection.Conexao;

public class CadClienteDao {
public String inserir(String nome, String telefone, String endereco, String rg) throws SQLException, ClassNotFoundException {
String sql = "insert into cad_usuario(nome,telefone,endereco,rg) values(?,?,?,?)";
Connection getcon = new Conexao().getcon();
PreparedStatement stmt = getcon.prepareStatement(sql);
stmt.setString(1, nome);
stmt.setString(2, telefone);
stmt.setString(3, endereco);
stmt.setString(4, rg);
stmt.execute();
stmt.close();
getcon.close();
return null;

}

}
[/code]
E o Faces-Config.xml arrumado:[code]<?xml version="1.0" encoding="UTF-8"?>

<faces-config xmlns=“http://java.sun.com/xml/ns/javaee
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_2_0.xsd
version=“2.0”>
<managed-bean>
<managed-bean-name>clienteMB</managed-bean-name>
<managed-bean-class>br.com.rapha.mb.CadClienteMB</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
[/code]

Correto !!!

Não não…aqui não ficou uma boa opção…na verdade vc precisa agregar e não extender…na OOP temos 2 formas de reutilizar codigo HERANÇA E AGREGAÇÃO…seu caso não é de herança…

Deu uma melhorada sim… parabéns :wink: …mas pode ficar bem melhor

[quote=FernandoFranzini][/quote]

[quote]Ultima pergunta, para conseguir gravar eu extendi minha classe model para classe MB, para conseguir fazer os getters e setters, está corretto, ou não, se não qual a melhor forma?
Não não…aqui não ficou uma boa opção…na verdade vc precisa agregar e não extender…na OOP temos 2 formas de reutilizar codigo HERANÇA E AGREGAÇÃO…seu caso não é de herança…

Deu uma melhorada sim… parabéns :wink: …mas pode ficar bem melhor

[/quote]
O que seria esse agregar q vc esta dizendo ? O que devo fazer em entaum?

O comportamento que vc quer usar na classe X deve ser declarado numa outra Y e assim dentro da classe X deve ser criado um objeto da classe Y, chamando seus comportamentos quando necessários - http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/aula_08.html
Dai vc propaga o código da mesma forma que vc fez sem herança…

[quote=FernandoFranzini]O comportamento que vc quer usar na classe X deve ser declarado numa outra Y e assim dentro da classe X deve ser criado um objeto da classe Y, chamando seus comportamentos quando necessários - http://www.metropoledigital.ufrn.br/aulas/disciplinas/poo/aula_08.html
Dai vc propaga o código da mesma forma que vc fez sem herança…[/quote]
Pronto Fernando está tudo funcionando, obrigado pela ajuda e paciencia !