Galera,estou fazendo um formulário e tem dois campos que são preenchidos com uma pesquisa no banco em tempo real na hora do preenchimento, estou usando o primefaces, java web, javaquery e banco postgres.
O que acontece é o seguinte, eu faço a pesquisa no banco ele vai no banco pega os dados que eu quero, porém na hora de mostrar na tela, ele não mostra, é um formulário com vários campos e o capo que eu quero atualizar somente um campo específico. Eu usei o update do prime, porém não deu certo, já fiz vários testes e sim ele está trazendo os dados que eu quero do banco, só queria algum exemplo de atualização em tempo real.
1 - Que tipo de campos são estes?
2 - Tem como mostrar o código?
Aqui era para o nome aparecer quando eu fizesse a pesquisa através da matrícula atualizando em tempo real quando o usuário digitar a matricula e fizer a ação automaticamente esse campo seria atualizado trazendo os dados na tela, porem esse é um formulário com vários campos, mais especificamente um modal.
<p:row>
<p:outputLabel value="Ger. Divisão Responsável"/><br/>
<p:dataTable value="#{AcoesBean.itensGerente}" var="itensGer" style="width: 200px">
<h:outputText id="evento12" value="#{itensGer.matricula_gerente}" />
</p:dataTable>
</p:row>
</p:row>
<p:spacer width="20px" />
Aqui eu faço a pesquisa através da matrícula
<p:row>
<p:outputLabel value="Mat. Ger. Divisão Responsável"/><br/>
<p:inputText id="evento13" size="23" value="#{AcoesBean.acoes.matricula_gerente}" style="text-transform: uppercase">
<p:ajax event="blur" listener="#{AcoesBean.pesquisar()}" update=":frmNovo growl"/>
</p:inputText>
</p:row>
BEAN
private ArrayList<Dados> itensGerente;
private Dados dados;
public ArrayList<Dados> getItensGerente() {
return itensGerente;
}
public void setItensGerente(ArrayList<Dados> itensGerente) {
this.itensGerente = itensGerente;
}
public Dados getDados() {
return dados;
}
public void setDados(Dados dados) {
this.dados = dados;
}
public void pesquisar() {
String matricula = acoes.getMatricula_gerente().toUpperCase();
try {
AcoesDao dao = new AcoesDao();
itensGerente = dao.listarPesquisa(matricula);
for (Dados nome : itensGerente) {
String nomeGer = nome.getNome_gerente();
System.out.println("Gerente: " + nome.getNome_gerente());
if (nomeGer != null || !nomeGer.equals(" ")) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(nomeGer));
} else {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Matícula inesistente"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
DAO
public ArrayList<Dados> listarPesquisa(String matricula) throws SQLException {
Connection conecxao = ConectaBd.conectar();
PreparedStatement comando = conecxao.prepareStatement("SELECT nome, matricula\n"
+ " FROM sch_funcionarios.tb_funcionarios_completa WHERE matricula LIKE '"+matricula+"'");
ResultSet resultado = comando.executeQuery();
ArrayList<Dados> lista = new ArrayList<Dados>();
while (resultado.next()) {
Dados retorno = new Dados();
retorno.setNome_gerente(resultado.getString("nome"));
retorno.setMatricula_gerente(resultado.getString("matricula"));
lista.add(retorno);
}
return lista;
}
DOMAIN
public class Dados {
private String nome_gerente;
private String matricula_gerente;
public String getNome_gerente() {
return nome_gerente;
}
public void setNome_gerente(String nome_gerente) {
this.nome_gerente = nome_gerente;
}
public String getMatricula_gerente() {
return matricula_gerente;
}
public void setMatricula_gerente(String matricula_gerente) {
this.matricula_gerente = matricula_gerente;
}
@Override
public String toString() {
return "Dados{" + "nome_gerente=" + nome_gerente + ", matricula_gerente=" + matricula_gerente + '}';
}
}
<p:row>
<p:outputLabel value="Ger. Divisão Responsável"/><br/>
<p:dataTable value="#{AcoesBean.itensGerente}" var="itensGer" style="width: 200px">
<h:outputText id="evento12" value="#{itensGer.matricula_gerente}" />
</p:dataTable>
</p:row>
</p:row>
Faltou o código do growl…
grow eu botei só pra saber se estava trazendo o nome mas eu vou tirar, no grow o nome aparece normalmente, só na tabela que não aparece
Basicamente, problemas como este, são identificados como falha na definição de quais elementos deverão ser atualizados, o que é definido na propriedade update <p:ajax event="blur" listener="#{AcoesBean.pesquisar()}" update=":frmNovo growl"/>
Luiz me falaram isso, mas eu tentei atualizar o formulário todo e não deu certo, mapeei o formulário ate o id do campo que eu queria atualizar e também não deu certo, creio eu que o problema seja somente nessa atualização mesmo, pois os dados estão vindo do banco normalmente pq no grow o nome aparece, só na tela que não aparece, no SysOut tbm o nome aparece. Já tentei tantas coisas que estou quase desistindo.
Então posta o código que você fez e está causando problemas. Não adianta colocar partes do código que funcionam, senão não tem como ajudar.
Evite usar imagens e linkar recursos externos.
Só o código da datatable e o código do inputText já são suficientes.
Saída de dados , onde o erro está:
<p:outputLabel value="Ger. Divisão Responsável"/>
p:dataTable value="#{AcoesBean.itensGerente}" var="itensGer" style="width: 200px">
h:outputText id="evento12" value="#{itensGer.nome_gerente}" />
</p:dataTable>
Entrada para a pesquisa:
<p:outputLabel value="Mat. Ger. Divisão Responsável"/>
p:inputText id="evento13" size="23" value="#{AcoesBean.acoes.matricula_gerente}" style="text-transform: uppercase">
p:ajax event="blur" listener="#{AcoesBean.pesquisar()}" update=":frmNovo"/>
</p:inputText>