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:
- Preencher automaticamente o campo “Nome” do autor ao informar o código.
- Carregar todos os dados do formulário ao preencher o código do livro.
Vou te orientar nos dois pontos:
- 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.