Estou usando Primefaces 7.0 e tendo problemas com o autocomplete. Ao executar o código abaixo, o autocomplete exibe a lista de sugestões, escolho a opção desejada, mas não executa o value, nem o listener e nem o converter, deixando o valor como null para a sequência da execução. Onde estou errando?
- XHTML
<p:autoComplete id="entrevistador" value="#{domicilioMB.entrevistador}" dropdown="true" widgetVar="widgetEntr"
completeMethod="#{entrevistadorMB.autoComplete}" var="entr" itemValue="#{entr}" itemLabel="#{entr.nome}"
converter="#{entrevistadorConverter}"
scrollHeight="100" minQueryLength="3" cache="true" cacheTimeout="5000"
forceSelection="true" alt="-- Selecione um entrevistador --" emptyMessage="Texto não encontrado!">
<p:ajax event="change" listener="#{domicilioMB.handleSelectEntrevistador}" process="@form" onstart="if(PF('widgetEntr').panel.is(':visible')) return false;" />
<p:ajax event="itemSelect" listener="#{domicilioMB.handleSelectEntrevistador}" process="@form" onstart="if(PF('widgetEntr').panel.is(':visible')) return false;" />
</p:autoComplete>
- ManagedBean
public List<Entrevistador> autoComplete(String texto) { List<Entrevistador> entrevistadores = new ArrayList<Entrevistador>(); try{ entrevistadores = entrevistadorFacade.autoComplete(texto); return entrevistadores; } catch (DAOException daoe) { JSFHelper.addGlobalMessage(FacesMessage.SEVERITY_ERROR, daoe.getMessage()); daoe.printStackTrace(); return null; } }
public void handleSelectEntrevistador(AjaxBehaviorEvent event) {
this.entrevistador = (Entrevistador)event.getSource();
}
public void handleSelectEntrevistador(SelectEvent event) {
this.entrevistador = (Entrevistador)event.getObject();
}
- Converter
@FacesConverter("entrevistadorConverter") public class EntrevistadorConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent ui, String value) throws ConverterException { if (value != null && !value.isEmpty()) { return (Entrevistador)ui.getAttributes().get(value); } return null; } @Override public String getAsString(FacesContext context, UIComponent ui, Object value) throws ConverterException { if (entity != null && entity instanceof Entrevistador && entity.getId() != 0) { ui.getAttributes().put( entity.getNome(), entity); return entity.getNome(); } } return ""; } }