Olá pessoal,
Segue um exemplo da tag autoComplete do Primefaces, usando um converter:
// O bean:
public class CompanyControl implements Serializable{
private CompanyMemoryDao dao = new CompanyMemoryDao();
private Company selected;
public Company getSelected() {
return selected;
}
public void setSelected(Company selected) {
this.selected = selected;
}
// Actions
public List<Company> completeCompany(){
return dao.listAll();
}
public String clear(){
this.selected = null;
return "";
}
}
// O converter:
public class CompanyConverter implements Converter {
CompanyMemoryDao dao = new CompanyMemoryDao();
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Company c = dao.getById( Long.parseLong(value) );
return c;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Company c = (Company) value;
return String.valueOf( c.getId() );
}
}
// A página:
<h:body>
<p:panel header="Auto Complete Example">
<h:form>
<h:panelGrid columns="2">
<h:outputLabel value="Empresa: " />
<p:autoComplete value="#{companyControl.selected}"
completeMethod="#{companyControl.completeCompany()}"
converter="companyConverter"
var="company" itemLabel="#{company.name}" itemValue="#{company}"
forceSelection="true">
</p:autoComplete>
</h:panelGrid>
<p:commandButton value="Ver" update="show" ajax="false"/>
<p:commandButton value="Limpar" action="#{companyControl.clear()}" ajax="false"/>
<p:spacer height="10"/>
<h:panelGroup id="show" rendered="#{not empty companyControl.selected}">
<h2><h:outputText value="Voce selecionou a empresa: " /></h2>
<h:panelGrid columns="2">
<h:outputLabel value="Empresa: " />
<h:outputText value="#{companyControl.selected.name}" />
<h:outputLabel value="Faturamento: " />
<h:outputText value="#{companyControl.selected.revenue}" />
</h:panelGrid>
</h:panelGroup>
</h:form>
</p:panel>
</h:body>
Veja funcionando aqui:
http://codepianist.com/java-ee/primefaces-autocomplete-com-converter/
Um grande abraço e sucesso!