Bom estou fazendo um trabalhinho usando EJB, primfaces 3.3.1, GlassFish, NetBeans. Estou com o seguinte problema ao tentar rodar a pagina orcamento.xhtml tenho o seguinte erro:
javax.servlet.ServletException: Não é possível criar instância para·a classe: managedBeans.OrcamentoBean.
erro console:
Grave: Error Rendering View[/admin/Orcamento.xhtml]
com.sun.faces.mgbean.ManagedBeanCreationException: Não é possível criar instância para·a classe: managedBeans.OrcamentoBean.
A seguir minha interface,meu pojo, meu dao, meu bean e minha view
Pojo Orcamento
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
@Entity
public class Orcamento implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@OneToOne
@JoinColumn(name = "cliente_id")
private Cliente cliente;
// @OneToMany(cascade = CascadeType.ALL)
// private ArrayList<Produto> produto = new ArrayList<Produto>();
private String mensagem;
private Double total;
private String situacao;
@Temporal(TemporalType.DATE)
private Date datacadastro;
public Orcamento() {
}
public Orcamento(Long id, Cliente cliente, String mensagem, Double total, String situacao, Date datacadastro) {
this.id = id;
this.cliente = cliente;
this.mensagem = mensagem;
this.total = total;
this.situacao = situacao;
this.datacadastro = datacadastro;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public Date getDatacadastro() {
return datacadastro;
}
public void setDatacadastro(Date datacadastro) {
this.datacadastro = datacadastro;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMensagem() {
return mensagem;
}
public void setMensagem(String mensagem) {
this.mensagem = mensagem;
}
public String getSituacao() {
return situacao;
}
public void setSituacao(String situacao) {
this.situacao = situacao;
}
}
Interface IOrcamento
import java.util.List;
import javax.ejb.Local;
import pojo.Cliente;
import pojo.Orcamento;
@Local
public interface IOrcamento {
void SalvaOrcamento(Orcamento orcamento);
List<Cliente> BuscaTodosCliente();
}
Meu DAO
import java.util.List;
import javax.ejb.*;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import pojo.Cliente;
import pojo.Orcamento;
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class OrcamentoDao implements IOrcamento {
@PersistenceContext
private EntityManager manager;
public OrcamentoDao() {}
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void SalvaOrcamento(Orcamento orcamento) {
System.out.println("Entrou no medos do Salvar do Dao");
manager.persist(orcamento);
manager.flush();
System.out.println("Orcamento Realizado com Sucesso! Id do Orcamento "+orcamento.getId());
}
@Override
public List<Cliente> BuscaTodosCliente() {
System.out.println("Entrou no buscadao");
TypedQuery<Cliente> query = manager.createQuery("select c from cliente c", Cliente.class);
return query.getResultList();
}
}
Meu Bean Acho que o problema esta aqui…
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import pojo.Cliente;
import pojo.Orcamento;
@ManagedBean
@SessionScoped
public class OrcamentoBean {
private Orcamento orcamento;
List<Cliente> listarclientes = new ArrayList<Cliente>();
@EJB
private IOrcamento orcamentoDao;
public OrcamentoBean() {
System.out.println("Entrou no construtor");
orcamento = new Orcamento();
listaclientes(); // vejamos se eu comentar esta linha ele CARREGA a view, o pior que é se eu tentar SALVAR ele salva o Orcamento no Banco.
}
// esse metodo é responsavel por trazer todos os clientes cadastrados no banco de dados
public void listaclientes(){
System.out.println("Entrou no listar clientes");
listarclientes = orcamentoDao.BuscaTodosCliente();
System.out.println("Saindo listar clientes");
}
public void listasituacoes(){}
public void salvar(ActionEvent event) {
System.out.println("Entrou no metodo salvar orcamento");
orcamentoDao.SalvaOrcamento(orcamento);
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, "Orcamento Realizado com Sucesso!", ""));
orcamento = new Orcamento();
}
public List<Cliente> getListarclientes() {
return listarclientes;
}
public void setListarclientes(List<Cliente> listarclientes) {
this.listarclientes = listarclientes;
}
public Orcamento getOrcamento() {
return orcamento;
}
public void setOrcamento(Orcamento orcamento) {
this.orcamento = orcamento;
}
public IOrcamento getOrcamentoDao() {
return orcamentoDao;
}
public void setOrcamentoDao(IOrcamento orcamentoDao) {
this.orcamentoDao = orcamentoDao;
}
}
Minha view
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="index.xhtml">
<ui:define name="conteudo">
<h:head>
<title>Cadastro Orçamento</title>
</h:head>
<h:body>
<p:panel id="panel" header="Cadastro de Orçamentos" toggleable="false" closable="true" >
<p:growl/>
<p:focus for="mensagem" />
<h:panelGrid columns="2" cellpadding="5">
<h:outputText value="Cliente:" />
<p:selectOneMenu id="cliente" value="#{orcamentoBean.orcamento.cliente}">
<f:selectItem itemLabel="Selecione Cliente..." itemValue="" />
<f:selectItems value="#{orcamentoBean.listaclientes}" />
</p:selectOneMenu>
<h:outputText value="Mensagem:" />
<p:editor id="mensagem" value="#{orcamentoBean.orcamento.mensagem}" width="600" required="true" requiredMessage="Campo Mensagem Indefinido!"/>
<h:outputText value="Situação:" />
<p:selectOneMenu id="situacao" value="#{orcamentoBean.orcamento.situacao}">
<f:selectItem itemLabel="Selecione Situação..." itemValue="" />
<f:selectItems value="#{orcamentoBean.listasituacoes()}" />
</p:selectOneMenu>
<h:outputText value="Total:" />
<p:inputText id="total" value="#{orcamentoBean.orcamento.total}" required="true" >
<f:validateLength minimum="4"/>
</p:inputText>
<h:outputText value="Data:" />
<p:calendar value="#{orcamentoBean.orcamento.datacadastro}" id="datacadastro" showOn="button" />
</h:panelGrid>
<p:separator style="width: 90%; height: 5px" />
<p:confirmDialog message="Deseja Cancelar?" showEffect="bounce" hideEffect="explode" modal="true"
header="Cadastro Clientes" severity="info" widgetVar="confirmacao">
<p:commandButton value="Sim" oncomplete="confirmacao.hide()"
onclick="window.location.href='index.xhtml'"/>
<p:commandButton value="Não" update="panel" onclick="confirmacao.hide()" type="button"/>
</p:confirmDialog>
<p:spacer width="30" height="10" />
<p:commandButton value="Salvar" actionListener="#{orcamentoBean.salvar}" update="panel" />
<p:spacer width="50" height="10" />
<p:commandButton value="Cancelar" onclick="confirmacao.show()" />
</p:panel>
</h:body>
</ui:define>
</ui:composition>
</html>
Lembrando se eu comentar o método da classe OrcamentoBean chamado listarclientes() ele funciona, carrega view e até salva o orcamento. Alguem ja passou por isso???