Boa tarde Galera
Estou necessitando fazer um Combo aninhado com Dentista e Paciente no Primefaces com jsf 2.2 e tomcat 7.0.53. Quando compilo para chamar a minha view no browse aparece essa mensagem de erro abaixo:
Informações: Server startup in 12408 ms
Jul 25, 2014 6:22:13 PM com.sun.faces.application.ApplicationImpl newThing
Grave: Unable to load class:
java.lang.InstantiationException: r.com.safp.bean.OsBean$ConverterDentista
at java.lang.Class.newInstance(Unknown Source)
Meu bean:
@ManagedBean(name = "MBOs")
@ViewScoped
public class OsBean{
/**
*
*/
private ArrayList<Os> itens;
private ArrayList<Os> itensFiltrados;
private Os os = new Os();
private DentistaPaciente dp = new DentistaPaciente();
private Dentista dentista;
private ArrayList<Dentista> comboDentista;
private ArrayList<Paciente> comboPaciente;
private ArrayList<DentistaPaciente> comboDentistaPaciente;
private ArrayList<Protese> comboProtese;
public ArrayList<Os> getItens() {
return itens;
}
public void setItens(ArrayList<Os> itens) {
this.itens = itens;
}
public ArrayList<Os> getItensFiltrados() {
return itensFiltrados;
}
public void setItensFiltrados(ArrayList<Os> itensFiltrados) {
this.itensFiltrados = itensFiltrados;
}
public Os getOs() {
return os;
}
public void setOs(Os os) {
this.os = os;
}
public ArrayList<Dentista> getComboDentista() {
return comboDentista;
}
public void setComboDentista(ArrayList<Dentista> comboDentista) {
this.comboDentista = comboDentista;
}
public ArrayList<Protese> getComboProtese() {
return comboProtese;
}
public void setComboProtese(ArrayList<Protese> comboProtese) {
this.comboProtese = comboProtese;
}
public DentistaPaciente getDp() {
return dp;
}
public void setDp(DentistaPaciente dp) {
this.dp = dp;
}
public ArrayList<DentistaPaciente> getComboDentistaPaciente() {
return comboDentistaPaciente;
}
public void setComboDentistaPaciente(
ArrayList<DentistaPaciente> comboDentistaPaciente) {
this.comboDentistaPaciente = comboDentistaPaciente;
}
public void carregarListagem() {
try {
DentistaDAO daod = new DentistaDAO();
// PacienteDAO daop = new PacienteDAO();
System.out.println("passou carregarListagem() ");
ProteseDAO daopr = new ProteseDAO();
comboDentista = daod.listar();
// comboPaciente = daop.listar();
comboProtese = daopr.listar();
OsDAO dao = new OsDAO();
itens = dao.listar();
} catch (SQLException e) {
e.printStackTrace();
JSFUtil.adicionarMensagemErro(e.getMessage());
}
}
public void carregarDentistaPaciente(AjaxBehaviorEvent event) {
try {
DentistaPacienteDAO daodp = new DentistaPacienteDAO();
System.out.println("passou carregarDentistaPaciente Bean() = "
+ dentista.hashCode());
/* comboDentistaPaciente = daodp.buscaPorDentista(String
.valueOf(dentista));*/
comboDentistaPaciente = daodp.buscaPorDentista("1");
} catch (SQLException e) {
e.printStackTrace();
JSFUtil.adicionarMensagemErro(e.getMessage());
}
}
public void prepararNovo() {
try {
Os o = new Os();
DentistaDAO daod = new DentistaDAO();
PacienteDAO daop = new PacienteDAO();
ProteseDAO daopr = new ProteseDAO();
comboDentista = daod.listar();
comboPaciente = daop.listar();
comboProtese = daopr.listar();
} catch (SQLException ex) {
ex.printStackTrace();
JSFUtil.adicionarMensagemErro(ex.getMessage());
}
}
public void novo() {
try {
OsDAO dao = new OsDAO();
dao.salvar(os);
itens = dao.listar();
JSFUtil.adicionarMensagemSucesso("Os salvo com sucesso!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
JSFUtil.adicionarMensagemErro(e.getMessage());
}
}
public void excluir() {
try {
OsDAO dao = new OsDAO();
dao.excluir(os);
itens = dao.listar();
JSFUtil.adicionarMensagemSucesso("Os excluido com sucesso!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
JSFUtil.adicionarMensagemErro(e.getMessage());
}
}
public void prepararEditar() {
try {
DentistaDAO dao = new DentistaDAO();
PacienteDAO daotpu = new PacienteDAO();
comboDentista = dao.listar();
comboPaciente = daotpu.listar();
} catch (SQLException ex) {
ex.printStackTrace();
JSFUtil.adicionarMensagemErro(ex.getMessage());
}
}
public void editar() {
try {
OsDAO dao = new OsDAO();
dao.editar(os);
itens = dao.listar();
JSFUtil.adicionarMensagemSucesso("Os editado com sucesso!");
} catch (SQLException e) {
e.printStackTrace();
JSFUtil.adicionarMensagemErro(e.getMessage());
}
}
@FacesConverter(value="converterDentista")
public class ConverterDentista implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException {
if(value != null) {
try {
System.out.println(" value="+value);
DentistaDAO dao = new DentistaDAO();
return dao.buscarPorCodigo(Long.valueOf(value));
} catch (SQLException ex) {
ex.printStackTrace();
JSFUtil.adicionarMensagemErro(ex.getMessage());
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof Dentista) {
Dentista dentista = (Dentista) value;
return String.valueOf(dentista.getId());
}
return "";
}
/* @Override
public String getAsString(FacesContext context, UIComponent component, Object object) throws ConverterException {
if(object != null && object instanceof Dentista) {
return ((Dentista)object).getId().toString();
}
return null;
} */
}
@FacesConverter(value="converterPaciente")
public class ConverterPaciente implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && !value.equals("")) {
PacienteDAO dao = new PacienteDAO();
try {
return dao.buscarPorCodigo(Long.valueOf(value));
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
JSFUtil.adicionarMensagemErro(e.getMessage());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
JSFUtil.adicionarMensagemErro(e.getMessage());
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof Paciente) {
Paciente paciente = (Paciente) value;
return String.valueOf(paciente.getId());
}
return "";
}
}
public Dentista getDentista() {
return dentista;
}
public void setDentista(Dentista dentista) {
this.dentista = dentista;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((dentista == null) ? 0 : dentista.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
OsBean other = (OsBean) obj;
if (dentista == null) {
if (other.dentista != null)
return false;
} else if (!dentista.equals(other.dentista))
return false;
return true;
}
public ArrayList<Paciente> getComboPaciente() {
return comboPaciente;
}
public void setComboPaciente(ArrayList<Paciente> comboPaciente) {
this.comboPaciente = comboPaciente;
}
}
Minha view com o botão Novo:
<p:dialog widgetVar="dlgOsNovo" closable="false" draggable="false"
resizable="false" header="Ordem de Serviço - Novo" modal="true"
appendTo="@(body)">
<h:form id="frmOsNovo">
<p:panelGrid id="pnlOsNovo" columns="2">
<p:outputLabel value="Dentista:" />
<p:selectOneMenu value="#{MBOs.os.dentista.id}" id="dentista" converter="converterDentista" >
<f:selectItem itemValue="" itemLabel="Selecione um Dentista:" />
<f:selectItems value="#{MBOs.comboDentista}" var="item"
itemValue="#{item.id}" itemLabel="#{item.nome}">
</f:selectItems>
<f:ajax
render="paciente"
listener="#{MBOs.carregarDentistaPaciente}"
event="change"
process="frmOsNovo" />
</p:selectOneMenu>
<p:outputLabel value="Paciente: " />
<p:selectOneMenu id="paciente" value="#{MBOs.os.paciente.id}" filter="true"
required="true" requiredMessage="O campo paciente é obrigatório!" >
<f:selectItem itemValue="" itemLabel="Selecione um Paciente:" />
<f:selectItems value="#{MBOs.comboDentistaPaciente}" var="item"
itemValue="#{item.id}" itemLabel="#{item.nome}"/>
</p:selectOneMenu>
</p:panelGrid>
<p:panelGrid columns="2">
<p:commandButton value="Gravar" actionListener="#{MBOs.novo}"
update=":msgGlobal :frmOs:tblOs"
oncomplete="verificar(xhr, status, args, 'dlgOsNovo', 'tabelaOs');" />
<p:commandButton value="Cancelar"
oncomplete="PF('dlgOsNovo').hide();" />
</p:panelGrid>
</h:form>
</p:dialog>
Aguem já passou por esse problema e pode me ajudar, agradeceria muito pois, o programa estava funcionando sem essa nova adaptação da classe Converter do Faces e já dura 3 dias e precisei pegar o ID do ComboBox(SelectOnemenu). Não sei se essa é a única alternativa para isso. Preciso de ajuda. Grato.