1
resposta

Preencher campo de pesquisa JSF

Estou com dúvida ao preencher a consulta informando o id e trás o nome do autor. A tela de consulta eu consegui implementar usando Dialog.

Gostaria também de saber como eu faço para carregar o formulário todo ao preencher o código do livro por exemplo. Segue o print da tela . Se alguém puder ajudar agradeço.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Ola!Pelo que você descreveu e mostrou nas imagens, você está utilizando JSF (JavaServer Faces) com algum componente de consulta via diálogo (provavelmente PrimeFaces) e deseja:

  1. Preencher automaticamente o campo “Nome” do autor ao informar o código.
  2. Carregar todos os dados do formulário ao preencher o código do livro.

Vou te orientar nos dois pontos:

  1. Preencher campo do autor ao digitar o código (Consulta por ID)

Você pode usar um evento ajax no campo de código do autor para fazer essa busca:

<p:inputText id="codigoAutor" value="#{livroBean.codigoAutor}">
    <p:ajax event="blur" listener="#{livroBean.carregarAutor}" update="nomeAutor" />
</p:inputText>

<p:inputText id="nomeAutor" value="#{livroBean.nomeAutor}" readonly="true"/>

No livroBean (ManagedBean ou @ViewScoped), implemente o método carregarAutor:

public void carregarAutor() {
    Autor autor = autorService.buscarPorId(codigoAutor);
    if (autor != null) {
        nomeAutor = autor.getNome();
    } else {
        nomeAutor = "";
        // opcional: exibir mensagem de erro
    }
}

Carregar todo o formulário ao preencher o código do livro

Mesma lógica, usando <p:ajax>:

<p:inputText id="codigoLivro" value="#{livroBean.codigoLivro}">
    <p:ajax event="blur" listener="#{livroBean.carregarLivro}" update="formLivro" />
</p:inputText>

No bean:

public void carregarLivro() {
    Livro livro = livroService.buscarPorId(codigoLivro);
    if (livro != null) {
        this.titulo = livro.getTitulo();
        this.isbn = livro.getIsbn();
        this.preco = livro.getPreco();
        this.dataLancamento = livro.getDataLancamento();
        this.autor = livro.getAutor();
    }
}

Lembre-se de usar o update="formLivro" apontando para o ID correto do <h:form> que engloba os campos.

Alternativa com <p:dialog> (caso você esteja usando diálogo para seleção)

Se estiver usando dialog para escolher o autor ou livro, você pode usar RequestContext (ou PrimeFaces.current() em versões mais novas):

PrimeFaces.current().dialog().closeDynamic(autorSelecionado);

E no ManagedBean que abriu o dialog:

public void autorSelecionado(SelectEvent event) {
    Autor autor = (Autor) event.getObject();
    this.codigoAutor = autor.getId();
    this.nomeAutor = autor.getNome();
}

Se puder colar aqui o trecho do XHTML do formulário (ou pelo menos dos inputs de código/nome), posso te passar com mais precisão.

Dica: sempre poste o código, senao fica dificil de ajudar.