Oi galera,
Tô desenvolvendo um sistema, utilizando jsf com primefaces…
deparei com um problema…
Estou usando um autoComplete na lista de espera para completar o nome do paciente e um evento ajax para atualizar os outros campos, mas aparece um erro no PacienteConverter que nao estou conseguindo corrigir. Eu consigo buscar através do autoComplete e preencher os outros campos na primeira vez, mas quando tento pela segunda aparece esse erro.
Obrigado
<ui:define name="corpo">
<f:metadata>
<o:viewParam name="espera" value="#{cadastroListaBean.espera}" />
<f:event listener="#{cadastroListaBean.inicializar}"
type="preRenderView" />
</f:metadata>
<h:form id="frmCadastroLista">
<h1>Lista de Espera</h1>
<p:messages autoUpdate="true" closable="true" />
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:button value="Novo" outcome="/listas/CadastroLista" />
<p:commandButton value="Salvar" id="botaoSalvar"
action="#{cadastroListaBean.salvar}" update="frmCadastroLista" />
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:button value="Pesquisa" outcome="/listas/PesquisaLista" />
</p:toolbarGroup>
</p:toolbar>
<p:panelGrid columns="2" style="width: 100%; margin-top: 20px"
columnClasses="rotulo, campo, rotulo, campo">
<p:outputLabel value="Nome do Paciente" for="nomepa" />
<p:autoComplete id="nomepa" size="45" dropdown="true"
value="#{cadastroListaBean.espera.paciente}"
completeMethod="#{cadastroListaBean.completarPaciente}"
var="paciente" itemLabel="#{paciente.nome}" itemValue="#{paciente}"
forceSelection="true">
<p:ajax event="change" process="@this" update="frmCadastroLista"
listener="#{cadastroListaBean.completarCampo}" />
</p:autoComplete>
<p:outputLabel value="Identificação" for="din" />
<h:outputText id="din" size="20" maxlength="30"
value="#{cadastroListaBean.espera.paciente.identificacao}" />
<p:outputLabel value="Sexo" for="sex" styleClass="sexo" />
<h:outputText id="sex" size="20" maxlength="30"
value="#{cadastroListaBean.espera.paciente.sexo.descricao}" />
<p:outputLabel value="Telefone" for="tele" />
<h:outputText id="tele" maxlength="20"
value="#{cadastroListaBean.espera.paciente.telefone}" />
<p:outputLabel value="Idade" for="idad" />
<h:outputText id="idad" size="10" maxlength="10"
value="#{cadastroListaBean.espera.paciente.idade}" />
</p:panelGrid>
</h:form>
</ui:define>
</ui:composition>
@FacesConverter(forClass = Paciente.class)
public class PacienteConverter implements Converter {
@Inject
private Pacientes pacientes;
public PacienteConverter() {
pacientes = CDIServiceLocator.getBean(Pacientes.class);
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Paciente retorno = null;
if (value != null) {
Long id = new Long(value);
retorno = pacientes.porId(id);
}
return retorno;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
Paciente paciente = (Paciente) value;
return paciente.getId() == null ? null : paciente.getId().toString();
}
return "";
}
}
Caused by: java.lang.NumberFormatException: For input string: "el"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Long.parseLong(Unknown Source)
at java.lang.Long.(Unknown Source)
at com.odontoclinicas.clinicas.converter.PacienteConverter.getAsObject(PacienteConverter.java:28)
at org.primefaces.component.autocomplete.AutoCompleteRenderer.getConvertedValue(AutoCompleteRenderer.java:570)
at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1034)
at javax.faces.component.UIInput.validate(UIInput.java:964)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1237)
at javax.faces.component.UIInput.processValidators(UIInput.java:702)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1612)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIForm.visitTree(UIForm.java:371)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:378)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:253)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1162)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
… 53 more
O erro aparece aqui
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Paciente retorno = null;
if (value != null) {
Long id = new Long(value);
retorno = pacientes.porId(id);
}
return retorno;
}
Precisamente aqui
Long id = new Long(value);