Tenho uma apalicaçao que é em JSF com suas janelas de cadastro e gostaria de usar o componente do PrimeFaces (Dialogs) para criar uma janela de pesquisa, como se fosse um popup.
estou usando da seguinte maneira:
<p:commandButton value="Pesquisa" onclick="dlg2.show();" type="button"/>
<p:dialog header="Modal Dialog" widgetVar="dlg2" modal="true" height="200">
<h:form>
<h:panelGrid binding="#{transacaoPesquisaFornecedor.tela}"/>
<h:dataTable binding="#{transacaoPesquisaFornecedor.gridPesquisa}"/>
</h:form>
</p:dialog>
para chamada da minha tela de pequisa e a grid onde apresenta os resultados. O nome do meu xhtml é pagina.xhtml
public String botaoAtualiza() throws SQLException {
AtualizaDados();
return "pagina";
}
Metodo em que o botao para pesquisar é chamado. O AtualizaDados() é onde é feito toda parte de pesquisa, sql e tudo mais, ou seja, chama o metodo AtualizaDados(), faz a pesquisa em banco e apresenta na table. Simples, consigo fazer isso em uma tela normal, no usando o “p:dialog”, porém se eu usar na hora em que é feita a pesquisa (clicado no botao) tudo é executado, mas atualiza a table.
Alguem sabe o que poderia estar de errado? Estou usando esse componente pela primeira vez.
Na view:
<p:dialog header="Modal Dialog" widgetVar="dlg2" modal="true" height="200">
<h:form>
<h:outputLabel for="term" value="Busca:" />
<h:inputText id="term" value="#{searcher.term}" />
<p:commandButton value="Buscar" action="#{searcher.search}" update="result" />
<p:dataTable value="#{searcher.result}" var="item">
<p:column>
<f:facet name="header">Id</f:facet>
#{item.id}
</p:column>
<p:column>
<f:facet name="header">Nome</f:facet>
#{item.name}
</p:column>
</p:dataTable>
</h:form>
</p:dialog>
<p:button value="Pesquisa" onclick="dlg2.show()" />
No ManagedBean:
@ManagedBean
@RequestScoped
public class Searcher {
private String term;
private List<Items> result;
public String getTerm() { return term; }
public void setTerm(String term) { this.term = term; }
public List<Item> getResult() { return result; }
public void search() {
// código da busca...
result = // o resultado da busca que você fez.
}
}
Esse código não foi testado mas deve funcionar.
Então fiz como o exemplo dado.
<p:commandButton value="Modal" onclick="dlg2.show();" type="button"/>
<p:dialog header="Modal Dialog" widgetVar="dlg2" modal="true" height="200">
<h:form>
<h:outputLabel for="term" value="Busca:" />
<h:inputText id="term" value="#{transacaoPesquisa.pesquisar}" />
<p:commandButton value="Buscar" action="#{transacaoPesquisa.botaoAtualiza}" update="result" />
<p:dataTable var="for" value="#{transacaoPesquisa.result}">
<f:facet name="header">
Pesquisa Fornecedor
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Código" />
</f:facet>
<h:outputText value="#{for.codigo}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome" />
</f:facet>
<h:outputText value="#{for.nome}" />
</p:column>
</p:dataTable>
</h:form>
</p:dialog>
@ManagedBean
@RequestScoped
public class TransacaoPesquisa {
private CamposPesquisaFornecedor campo = new CamposPesquisaFornecedor();
private ArrayList<CamposPesquisaFornecedor> campos = new ArrayList<CamposPesquisaFornecedor>();
private String pesquisar = "";
public String getPesquisar() {
return pesquisar;
}
public void setPesquisar(String pesquisar) {
this.pesquisar = pesquisar;
}
public CamposPesquisaFornecedor getCampo() {
return campo;
}
public void setCampo(CamposPesquisaFornecedor campo) {
this.campo = campo;
}
public ArrayList<CamposPesquisaFornecedor> getCampos() {
return campos;
}
public void setCampos(ArrayList<CamposPesquisaFornecedor> campos) {
this.campos = campos;
}
public void botaoAtualiza() throws SQLException {
AtualizaDados();
getResult();
}
public ArrayList<CamposPesquisaFornecedor> getResult() throws SQLException {
AtualizaDados();
return campos;
}
public void AtualizaDados() throws SQLException {
//aqui o processo de atualizar, fazer a pesquisa com o sqls e tudo mais...onde alimenta os campos..
while (rs.next()) {
campo = new CamposPesquisaFornecedor();
campo.setCodigo(rs.getInt("codigo"));
campo.setNome(rs.getString("nome"));
campos.add(campo);
}
}
O Grande detalhe, funciona a pesquisa a tela e tudo mais, porém a pesquisa so funciona se eu der um “Enter” se clicar nao atualiza, e se eu der um “Enter” fecha o meu dialog e volta a tela normal, ai quando eu abro novamente, tem a pesquisa feita.
Alguma maneira de quando pressionar o Enter ou clickar que faça a atualizaçao da table sem fechar o dialog?
já tentei colocar:
OnKeyDown="if(event.keyCode==13) {event.keyCode=9}"
tanto no botao quanto no text de pesquisa, mas fazendo isso, nao pesquisa, nao fecha a janela, nao faz nada :S