Olá a todos , estou utilizando um autocomplete do primefaces que pega alguns valores do banco para completar, até ai tudo bem, fiz um converter e mostra tudo bonitinho.
<strong>Meu View:</strong>
<h:form>
<h:messages id=“messages” />
<p:fieldset legend=“Cadastro Fabricante”>
<p:toolbar>
<p:toolbarGroup>
<p:commandButton icon=“ui-icon-home” value=“adicionar” action="#{cellBean.adicionarFabricante()}" update="<a class="mention" href="/u/form">@form</a>"></p:commandButton>
</p:toolbarGroup>
</p:toolbar>
<h:panelGrid columns="3" cellpadding="5">
<p:outputLabel value="Fabricante:" for="complete" />
<p:autoComplete id="complete" minQueryLength="2" maxResults="5"
value="#{cellBean.selecionado.nome}" converter="FabricanteConverter" completeMethod="#{cellBean.completeFabricante}"
var="fabri" itemLabel="#{fabri}" itemValue="#{fabri}">
<f:ajax event="blur" render="messages pais" />
</p:autoComplete>
<h:outputText converter="FabricanteConverter" id="pais" value="#{fabri.nome}" ></h:outputText>
</h:panelGrid>
<h:outputLabel value="Fabricante"></h:outputLabel>
<p:inputText value="1"></p:inputText><br></br>
<h:outputLabel value="Pais"></h:outputLabel>
<p:inputText value="2"></p:inputText>
</p:fieldset>
</h:form>
Só que eu precisava que no meu itemLabel utilizasse o nome da minha entidade , de forma que ficasse assim o itemLabel do autocomplete " itemLabel = “#{fabri.nome}”" só que ele não reconhece “nome” como um caminho , sendo que se eu fosse diretamente do Bean do autocomplete no caso “CellBean.selecionado” consigo acessar o “.nome”
Devido a isso estou tendo um problema no conversor que não pega o valor da String nome da minha entidade, mesmo mostrando os valores corretamente;
Meu Bean:
public class CellBean {
private FabricanteDAO cda = new FabricanteDAO();
private Fabricante selecionado;
//instâncias Fabricante
private Fabricante fabricante = new Fabricante();
private List lstFabricantes = new ArrayList<>();
// Actions
public List<Fabricante> completeFabricante(String query){
String queryLowerCase = query.toLowerCase();
List<Fabricante> allFabricantes = cda.buscarFabricantes();
return allFabricantes.stream().filter(t -> t.getNome().toLowerCase().startsWith(queryLowerCase)).collect(Collectors.toList());
}
public String clear(){
this.fabricante = null;
return "";
}
/*
METODOS GETTERS E SETTERS
*/
}
Como proceder gente? eu precisava resolver isso por que iria fazer uma requisição f:ajax que iria mostrar um outputText do lado do input do autocomplete com o mesmo nome completado no autocomplete, só que devido eu não conseguir especificar o itemLabel acaba dando erro de conversão.
Funcionamento autoComplete:
