Bom dia!
Estou com um problema no Converter de uma classe.
Em um formulário, tenho 2 selectOneMenu, ambos uso converter
@FacesConverter("empresaConverter")
public class EmpresaConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent ui, String string) {
if (string.trim().equals("")) {
return null;
} else {
try {
Empresa empresa = JPAUtil.getEntityManager().find(Empresa.class, Long.valueOf(string));
return empresa;
} catch(NumberFormatException exception) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid empresa"));
}
}
}
@Override
public String getAsString(FacesContext context, UIComponent ui, Object obj) {
if (obj == null || obj.equals("")) {
return null;
} else {
Empresa empresa = (Empresa) obj;
return empresa.getCodigo().toString();
}
}
}
@FacesConverter("especialidadeConverter")
public class EspecialidadeConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent ui, String string) {
if (string.trim().equals("")) {
return null;
} else {
try {
return JPAUtil.getEntityManager().find(Especialidade.class, Long.valueOf(string));
} catch(NumberFormatException exception) {
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid especialidade"));
}
}
}
@Override
public String getAsString(FacesContext context, UIComponent ui, Object obj) {
if (obj == null) {
return null;
} else {
Especialidade esp = (Especialidade) obj;
return esp.getCodigo().toString();
}
}
}
No Formulário tenho:
<div class="form-group">
<h:outputLabel value="Empresa" for="empresa" />
<h:selectOneMenu id="empresa"
value="#{agendaController.empresaSelecionada}"
required="true" requiredMessage="Selecione uma Empresa"
styleClass="form-control" >
<f:selectItems noSelectionOption="Selecione"
value="#{agendaController.empresas}"
var="empresa" itemLabel="#{empresa.nome}"
itemValue="#{empresa}"
/>
<f:converter converterId="empresaConverter"/>
</h:selectOneMenu>
<h:message for="empresa" styleClass="help-block"/>
</div>
<div class="form-group">
<h:outputLabel value="Especialidade" for="especialidade" />
<h:selectOneMenu id="especialidade"
value="#{agendaController.especialidadeSelecionada}"
required="true" requiredMessage="Selecione uma Especialidade"
styleClass="form-control" converter="especialidadeConverter"
>
<f:selectItems noSelectionOption="Selecione"
value="#{agendaController.especialidades}"
var="especialidade" itemLabel="#{especialidade.nome}"
itemValue="#{especialidade}"
/>
</h:selectOneMenu>
<h:message for="especialidade" styleClass="help-block"/>
</div>
O selectOne da especialidade funciona, porém o da Empresa fica aparecendo: Erro de validação: o valor não é válido
Implementei o hashCode() e o Equals() em ambas as classes.
Já tentei colocar o converter no <f:converter ou direto na tag <h:selectOneMeny, das duas formas o erro acontece…
Não sei mais o que pode ser…
Obrigado!