pessoal preciso que a cada tecla de eu digito ele chama o metodo por enquanto coloquei um botão pra chamar meu metodo mas não quero assim
<f:facet name="header">
<p:outputPanel>
<table align="right">
<tr>
<td width="70%"></td>
<td><p:selectOneMenu value="#{produtoBean.filtro}"
immediate="true" style="width: 150px">
<f:selectItem itemValue="" itemLabel="Todos" />
<f:selectItem itemValue="codigoBarras"
itemLabel="Codigo Barras" />
<f:selectItem itemValue="descricao" itemLabel="Descrição" />
</p:selectOneMenu></td>
<td><p:inputText value="#{produtoBean.param}" /></td>
<td><p:commandButton action="#{produtoBean.getProdutos}"
value="Pesquisar" update="tbl1" /></td>
</tr>
</table>
</p:outputPanel>
</f:facet>
meu metodo
public List<Produto> getProdutos() {
try {
if (filtro.equals("codigoBarras")) {
produtos = produtoDao.getFiltro("from Produto as prod where prod.codigoBarras like :codigoBarras", param, filtro);
} else if (filtro.equals("descricao")) {
produtos = produtoDao.getFiltro("from Produto as prod where prod.descricao like :descricao", param, filtro);
} else {
produtos = produtoDao.getBeans();
}
} catch (Exception e) {
System.out.println(e);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro!", " " + e));
}
return produtos;
}
o resultado final que tu quer é o que, um autocomplete ou um filtro dentro de uma tabela?
e qual o tamanho da tua list? (marromenos)
a carra depende o tanto de registro que tem registrado no banco… mas pq a pergunta não to entendendo?
Dependendo do tamanho da tua lista, as vezes é melhor tu carregar a lista toda e fazer o keyup via jquery, assim você não faz requisições no servidor, e também não quebra a velociadde dele se tiver 30 pessoas usando ao mesmo tempo.
no jquery existem diversos plugins onde tu pode pesquisar dados de um input em todos os campos da sua tabela que já está 100% carregaad vinculando os ID’s, por isso que eu perguntei o tamanho da tua tabela, e toda a ação vai ser na propria view, e não no servidor.
entendi =/… mas enquanto isso ql seria a soluÇão para eu chamar o bean ao precionar uma tecla?
c tem algum tuturial ou exemplo com jquery pra mim ja i dando uma olhada?
Para o teu input:
<p:inputText value="#{produtoBean.param}">
<f:ajax event="change" listener="#{produtoBean.getProdutos}" />
</p:inputText>
o teu método:
public List<Produto> getProdutos(AjaxBehaviorEvent event) {
try {
if (filtro.equals("codigoBarras")) {
produtos = produtoDao.getFiltro("from Produto as prod where prod.codigoBarras like :codigoBarras", param, filtro);
} else if (filtro.equals("descricao")) {
produtos = produtoDao.getFiltro("from Produto as prod where prod.descricao like :descricao", param, filtro);
} else {
produtos = produtoDao.getBeans();
}
} catch (Exception e) {
System.out.println(e);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro!", " " + e));
}
return produtos;
}
se não me engano
beleza deu certo aki vlw
<p:ajax event=“keyup” listener="#{produtoBean.getProdutos}" update=“tbl1”></p:ajax>