Formulario PrimeFaces + Insercao Banco RESOLVIDO

Pessoal… é o seguinte.
eu fiz um formulario em primefaces e criei a classe que vai receber estes dados.
Gostaria de saber como posso fazer para inserir estes dados a partir da classe no banco de dados por uma boa forma.
Por exemplo.

index.xhtml

<h:outputText value="Nome Empresa: " />
					<p:inputText value="#{empresa.nome}" required ="true"/>

Contato.java

   import javax.faces.bean.ManagedBean;

@ManagedBean(name="empresa")

public class Contato {

	private String nome;

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

o prime faces ja manda o nome para a classe automaticamente. Se eu instanciar esta classe a partir de uma classe por exemplo ACAO.java
e pedir para a acao inserir os dados no banco ele vai me dar um retorno nullo pois o objeto que crio na acao nao vai ter as informacoes que o prime faces inseriu.
e se eu coloco para no setNome da classe Contato para inserir direto no banco de dados… eu perco esta classe para popular com informacoes do banco mais para frente
e mostrar por exemplo um relatorio.

Alguem poderia me dar uma LUZ do que fazer?
Obrigado

Bem, uma forma melhor do que essa seria ter uma classe bean.

exemplo.

public class Contato{
...
}
public class ContatoDAO{
...
}
@ManagedBean
@RequestScoped
public class ContatoBean{
       private Contato contato;
       
       //getter e setter

       public void adiciona(){
              new ContatoDAO().adiciona(contato);
       }
}

Espero que essa tenha sido a sua dúvida.

[]'s

certo… mais como eu estou instanciando o objeto contato dentro da contatobean ele pega os dados do Contato que o prime faces inseriu?

para pegar os dados do objeto contato vc tem que criar o formulário com esses campos. o framework se encarrega de carregar os dados no objeto.

Por exemplo:

<h:form>
      <p:inputText value="#{meuBean.meuObjeto.atributo}"/>
</h:form>

Polverini.
eu sei… eu gostaria de saber assim
atrasves do inputtext value="#{empresa.nome}"/>
a classe Contato ja é “populada” com o nome que inseri no text.
Eu gostaria de saber como eu faco para uma outra classe por exemplo a Acao, que é a que vai colocar as informacoes que estao na Contato para o banco, receber os dados que ja estao no Contato intendeu?
Pois se eu criar um objeto contato dentro da classe acao este objeto vai estar null

p/ instanciar o objeto, dentro da classe bean:

@PostConstruct
public void init{
      contato = new Contato();
}

ou no construtor, mas eu prefiro da forma acima.

Kcobainnn
esta tag
@RequestScoped

éla pega os dados da classe que o prime faces utilizou para inserir os dados dos inputtext?

vamos ver se entendi bem.

para gravar os dados na base eu uso as seguintes classes:

public class ContatoDao{
}
public class ContatoBean{
}
public class Contato{
}

onde Contato é o objeto que quero gravar no banco, dao é quem faz a conversa com o banco de dados e bean é meu controlador de ações.

no bean eu instancio um novo contato e o contatoDao:

public class ContatoBean{
      private Contato contato;
      private ContatoDao dao;

      public ContatoBean(){
           this.contato = new Contato();
           this.dao = new ContatoDao();
      }
}

implemento o getters e setters para o objeto contato e crio uma ação chamada gravar que ira usar o objeto dao para gravar o objeto no banco de dados.

no xhtml fica assim:

<h:form>
   <h:inputText value="#{contatoBean.contato.nome}"/>
   <h:commandButton action="#{contatoBean.gravar}"/>
</h:form>

Era isso ?

farelogost, não…

isso é uma anotação, que diz, que após você fazer alguma requisição da página, os dados vão ser zerados.
como você só precisa inserir dados no banco, você não precisa guardar esses dados no bean, apenas faz uma requisição, adiciona o nome no banco e só.

sua dúvida ainda é como que a página reconhece o campo da classe bean, certo?

no momento que você instancia o seu objeto e cria os getters e setters do seu objeto, quando você referencia um objeto do seu bean, ele vai passar e receber os valores pelos getters e setters, entende?

no caso,

 <p:inputText value="#{meuBean.meuObjeto.atributo}"/> 

seria

 <p:inputText value="#{contatoBean.contato.nome}"/> 

espero que eu tenha sido claro.

[]'s

sim… vc foi claro
eu acho que eu nao estou conseguindo me expressar ^^
é o seguinte
vou tentar postar denovo

index.xhtml

<h:outputText value="Nome Empresa: " />
					<p:inputText value="#{empresa.nomeEmpresa}" required ="true"/>

Empresa.java

@ManagedBean(name="empresa")

public class Empresa {

	private String nomeEmpresa;
 
        public String getNomeEmpresa() {
		return nomeEmpresa;
	}
	
	public void setNomeEmpresa(String nomeEmpresa) {
		this.nomeEmpresa = nomeEmpresa;
	}

eu sei que quando a pessoa colocar por exemplo André no TEXT criado na index.xhtml… a classe Empresa atraves do metodo SET vai colocar o André na variavel
NomeEmpresa.

porem… eu quero o seguinte.
quando a pessoa clicar em “submit”
havera uma classe de ACAO que fara o seguinte.


public class acao {
       
        Empresa emp;
        Dao dao;
	public void inserirEmpresa() {
		emp = new Empresa();
                dao = new DAO();
                dao.insere(emp); // porem ..... nesta parte o emp.getgetNomeEmpresa nao terá o andré... pois instanciei o objeto aqui e agora
	} 
	
}

intendeu?
gostaria de saber se tem como eu pegar as informacoes do BEAN que ja foi populado pelo primefaces em outra classe
para fazer as acoes
intende?

simples.
no seu bean


public Acao acao = new Acao();

public void inserirEmpresa(){
       acao.inserirEmpresa(empresa);
}

é pela seu bean, no caso, sua classe Empresa, que você faz isso, não em outra classe.

hmm certo…suspeitava dês de o principio

muito obrigado pela ajuda cara

só uma duvida
acao.inserirEmpresa(empresa);
este empresa… eu tenho que instanciar ela?

você instancia ele no construtor da sua bean, depois não precisa, porque sempre que você instancia-lo, você cria uma nova referência na memória, fazendo assim com que perca seu antigo valor.

certo… obrigado kcobainnn

nao deu certo… se eu instanciar no construtor na bean da stack over flow

consegui fazer do jeito que queria
era so fazer o seguinte

[code]
<h:commandButton id=“btn” value=“Enviar” action="#{acao.inserirEmpresa(empresa)}"/>

[code]

ai a classe ACAO vai receber os dados da classe empresa que foi preenchido no formulario

obrigado pela ajuda de todos