Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Formulario sem Acesso os Atributos da classe

Não consigo ver em qual detalhe estou pecando pois não consigo acessar os atributos para inserir um cadastro no banco. quando digito a classe bean e o ponto o eclipse so sugere para mim class ao inves de produto segue meu codigo.

<?xml version="1.0" encoding="UTF-8" ?>
<!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://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<ui:composition template="_template.xhtml">

    <ui:define name="titulo">
        Novo Produto
    </ui:define>

    <ui:define name="conteudo">
        <h:form id="produto">
            <fieldset>
                <legend>Dados do Produto </legend>
                    <br/>
            <!--      <h:panelGrid columns="1"> -->

                    <h:outputLabel value="Nome:" for="nome" />
                    <h:inputText id="nome"      value="#{produtoBean.Produtos.nome}">
                        <f:ajax event="blur" render="messageNome" />
                    </h:inputText>

                    <h:message for="nome" id="messageNome" />

                    <h:outputLabel value="Preco:" for="preco" />
                    <h:inputText id="preco"      value="#{produtoBean.produtos.preco}"    required="true">
                        <f:passThroughAttribute name="type" value="preco" />
                    </h:inputText>

                    <h:message for="preco" id="messagePreco" />

                    <h:commandButton value="Cadastrar"  action="#{produtoBean.gravar}"/>

            <!--      </h:panelGrid>-->
            </fieldset>        
      </h:form>    
    </ui:define>
</ui:composition>
</html>

classe produtos

package br.com.ronaldo.mercado.modelo;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Produtos implements Serializable{


    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private int codigo;

    private String nome;
    private double preco;


    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getNome() {
        return nome;
    }

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

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }


}

meu Dao

package br.com.ronaldo.mercado.dao;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.criteria.CriteriaQuery;

import br.com.ronaldo.mercado.modelo.Produtos;


public class Dao<T> {

    private final Class<T> classe;


    public Dao(Class<T> classe) {
        this.classe = classe;
    }

    public void adiciona(T t){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("mercado");
        EntityManager    em    = emf.createEntityManager();

        em.getTransaction().begin();

        em.persist(t);
        em.getTransaction().commit();
        em.close();
    }

}

meu bean

package br.com.ronaldo.mercado.bean;



import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.ronaldo.mercado.dao.Dao;
import br.com.ronaldo.mercado.modelo.Produtos;


@ManagedBean
@ViewScoped
public class ProdutoBean implements Serializable {


    private static final long serialVersionUID = 1L;

    private Produtos produto = new Produtos();


    public String gravar(){
        System.out.println("gravando produtos" + this.produto.getNome());

        new Dao<Produtos>(Produtos.class).adiciona(this.produto);

       this.produto = new Produtos();

       return "produto?faces-redirect=true";
    }

}

meu persistence

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="mercado" transaction-type="RESOURCE_LOCAL">

        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <class>br.com.ronaldo.mercado.modelo.Produtos</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/mercadodb" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="Copa2014" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        </properties>
    </persistence-unit>

</persistence>
6 respostas

RONALDO acho que o seu erro é porque não gerou os getters e o setters, como você quer acessar sem os getters? na sua classe bean cria os getters e o setters do seu produto. E veja se funciona.

O Alisson primeiramente valeu pela ajuda, mas olha la meus getters e o setters la na classe produtos. e mesmo assim quando eu faço no formulario de input value = "#{produtoBean.}" ele nao aparece o produto que esta instanciado em produtoBean

solução!

Opa tamo aqui para isso mesmo, sim sim repara bem que você tem o getters e o setters do seu objeto produto que seria, o nome e o preco correto? Você tem o getters e o setters do nome e do preco. Agora repara na sua classe bean.

package br.com.ronaldo.mercado.bean;



import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.ronaldo.mercado.dao.Dao;
import br.com.ronaldo.mercado.modelo.Produtos;


@ManagedBean
@ViewScoped
public class ProdutoBean implements Serializable {


    private static final long serialVersionUID = 1L;

    private Produtos produto = new Produtos();


    public String gravar(){
        System.out.println("gravando produtos" + this.produto.getNome());

        new Dao<Produtos>(Produtos.class).adiciona(this.produto);

       this.produto = new Produtos();

       return "produto?faces-redirect=true";
    }

}

Ta vendo que você instancio um objeto no seu bean?

  private Produtos produto = new Produtos(); // aqui uma instancia do objeto produto.
Falto o getter dessa instancia para você poder acessar da sua html.

Gera o getter e o setter do Produto na sua classe bean, ai no seu html vai aparecer para você poder acessar.

Deu certo?

Ohhhhh que vacilo era isso mesmo, era que ao meu ver eu achava que o getter ali so iria fazer o acesso ao metodo do getter. tipo getProduto.xxxx ao inves de produto.xxxx mas valeu pela ajuda era isso mesmo

Opa que bom então irmão bons estudos ae