Estou fazendo uma aplicação web usando primefaces 5.1 e estou usando o componente dialog para fazer a seleção de uma pesquisa. Estou conseguindo fazer isso utilizando somente uma tabela, mas o problema é que estou com dificuldade em fazer isso mas agora com uma tela que tem a pesquisa com duas tabelas para quando selecionar possa completar os campos. A primeira pesquisa dessa tela é na tabela AgendaTriados vai fazer um set na tabela AgendaMarcacao e a segunda pesquisa ela vai buscar nela mesma.
Aqui é o botão que clico para abrir a tela de pesquisa
<p:toolbar style="margin-top: 20px">
<p:toolbarGroup>
<p:button value="Novo" outcome="/triados/CadastroTriados" />
<p:commandButton value="Salvar" id="botaoSalvar"
action="#{cadastroAgendaTriadosBean.salvar}" update="@form" />
</p:toolbarGroup>
<p:toolbarGroup align="right">
<p:commandButton value="Imprimir" />
<p:separator />
<p:button value="Pesquisa" outcome="/triados/PesquisaTriados" />
</p:toolbarGroup>
</p:toolbar>
<div style="padding-top: 10px;">
<p:commandButton value="Adicionar Paciente"
action="#{cadastroAgendaTriadosBean.abrirDialogo}"
process="@this" update="@none">
<p:ajax event="dialogReturn"
listener="#{cadastroAgendaTriadosBean.listaPacienteSelecionado}"
process="@this" update=":frmTriados:agenda_marcacao"/>
</p:commandButton>
</div>
</ui:composition>
A pagina de controle.
@Named
@ViewScoped
public class CadastroAgendaTriadosBean implements Serializable {
private static final long serialVersionUID = 1L;
private AgendaTriados triado;
private AgendaMarcacao agenda;
@Inject
private Alunos alunos;
@Inject
private Disciplinas disciplinas;
@Inject
private CadastroAgendaTriadosService cadastroAgendaTriadosService;
public CadastroAgendaTriadosBean() {
limpar();
}
private void limpar() {
triado = new AgendaTriados();
agenda = new AgendaMarcacao();
triado.getAgenda_marcacao();
}
public void abrirDialogo() {
Map<String, Object> opcoes = new HashMap<>();
opcoes.put("modal", true);
opcoes.put("resizable", false);
opcoes.put("contentHeight", 470);
// opcoes.put("contentWidth", "100%");
// opcoes.put("headerElement", "customheader");
RequestContext.getCurrentInstance().openDialog("/triados/Pesquisa", opcoes, null);
}
public void selecionar(AgendaMarcacao agenda_marcacao) {
RequestContext.getCurrentInstance().closeDialog(agenda_marcacao);
}
public void listaPacienteSelecionado(SelectEvent event) {
AgendaMarcacao agenda_marcacao = (AgendaMarcacao) event.getObject();
triado.setAgenda_marcacao(agenda_marcacao);
}
public void selecionarTriado(AgendaTriados agenda_triados) {
RequestContext.getCurrentInstance().closeDialog(agenda_triados);
}
public void listaTriadoSelecionado(SelectEvent event) {
AgendaTriados agenda_triados = (AgendaTriados) event.getObject();
this.triado = agenda_triados;
}
public void completarCampo() {
this.agenda.completarCampo();
}
public List<Aluno> completarAluno(String nome) {
return this.alunos.porNome(nome);
}
public List<Disciplina> completarDisciplina(String nome) {
return this.disciplinas.porNome(nome);
}
public void inicializar() {
if (FacesUtil.isNotPostback()) {
agenda = new AgendaMarcacao();
triado.getAgenda_marcacao();
// this.triado.completarCampo();
System.out.println("Inicializando...");
}
}
public boolean isEditando() {
return this.triado.getId() != null;
}
public void salvar() {
this.triado = cadastroAgendaTriadosService.salvar(this.triado);
limpar();
FacesUtil.addInfoMessage("Paciente agendado com sucesso!");
}
public IndicacaoProcedimento[] getIndicacoes() {
return IndicacaoProcedimento.values();
}
public AgendaTriados getTriado() {
return triado;
}
public void setTriado(AgendaTriados triado) {
this.triado = triado;
}
public AgendaMarcacao getAgenda() {
return agenda;
}
public void setAgenda(AgendaMarcacao agenda) {
this.agenda = agenda;
}
}
Tela de pesquisa. Aqui tem as duas pesquisas. A primeira referente a AgendaMarcacao e a segunda AgendaTriados
<h:body>
<h:form id="frmPesquisa">
<div style="margin-top: 5px; margin-bottom: 20px">
<p:messages autoUpdate="true" closable="true" />
<p:panelGrid columns="3" id="painel" style="border-colapse:inherit">
<p:outputLabel value="Paciente" />
<p:inputText size="30"
value="#{pesquisaAgendaBean.filtro.nomePaciente}" />
<p:commandButton value="Pesquisar"
action="#{pesquisaAgendaBean.pesquisar}" update="@form" />
</p:panelGrid>
</div>
<p:dataTable id="agendaTable"
value="#{pesquisaAgendaBean.agendasFiltrados}" var="agenda"
style="margin-top: 20px" emptyMessage="Nenhum paciente encontrado."
rows="10" paginator="true" paginatorAlwaysVisible="false"
paginatorPosition="bottom">
<p:column headerText="Nome do Paciente" style="width: 250px;">
<h:outputText value="#{agenda.lista_espera.paciente.nome}" />
</p:column>
<p:column headerText="RG" style="width: 120px; text-align:center">
<h:outputText value="#{agenda.lista_espera.paciente.identificacao}" />
</p:column>
<p:column headerText="Idade" style="width: 120px; text-align:center">
<h:outputText value="#{agenda.lista_espera.paciente.idade}" />
</p:column>
<p:column style="width: 30px; text-align: center">
<p:commandButton icon="ui-icon-check" title="Selecionar"
process="@this"
action="#{cadastroAgendaTriadosBean.selecionar(agenda)}" />
</p:column>
</p:dataTable>
</h:form>
<h:form id="frmPesquisaTriado">
<div style="margin-top: 5px; margin-bottom: 20px">
<p:messages autoUpdate="true" closable="true" />
<p:panelGrid columns="3" id="painel" style="border-colapse:inherit">
<p:outputLabel value="Paciente" />
<p:inputText size="30"
value="#{pesquisaAgendaTriadosBean.filtro.nomePaciente}" />
<p:commandButton value="Pesquisar"
action="#{pesquisaAgendaTriadosBean.pesquisar}" update="@form" />
</p:panelGrid>
</div>
<p:dataTable id="triadoTable"
value="#{pesquisaAgendaTriadosBean.agendaFiltrados}" var="triado"
style="margin-top: 20px" emptyMessage="Nenhum paciente encontrado."
rows="10" paginator="true" paginatorAlwaysVisible="false"
paginatorPosition="bottom">
<p:column headerText="Nome do Paciente" style="width: 250px;">
<h:outputText value="#{triado.agenda_marcacao.lista_espera.paciente.nome}" />
</p:column>
<p:column headerText="RG" style="width: 120px; text-align:center">
<h:outputText value="#{triado.agenda_marcacao.lista_espera.paciente.identificacao}" />
</p:column>
<p:column headerText="Idade" style="width: 120px; text-align:center">
<h:outputText value="#{triado.agenda_marcacao.lista_espera.paciente.idade}" />
</p:column>
<p:column style="width: 30px; text-align: center">
<p:commandButton icon="ui-icon-check" title="Selecionar"
process="@this"
action="#{cadastroAgendaTriadosBean.selecionarTriado(triado)}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
Quando clico o botão que chama um listener, ele irá chamar o metodo listaPacienteSelecionado que irá realizar o:
AgendaMarcacao agenda_marcacao = (AgendaMarcacao) event.getObject();
triado.setAgenda_marcacao(agenda_marcacao);
Quando selecionar irá chamar o selecionar:
RequestContext.getCurrentInstance().closeDialog(agenda_marcacao);
Mas como eu disse… eu estou com dificuldade em executar as duas pesquisa ao mesmo tempo, ou seja, quando clicar o botão e chamar o listener ele tbm executar o codigo na listaTriadoSelecionado.
AgendaTriados agenda_triados = (AgendaTriados) event.getObject();
this.triado = agenda_triados;
Tentei colocar os dois em um só metodo, mas não conseguir.
Alguém pode me ajudar. Creio que seja um problema simples, mas não estou conseguindo resolver pela falta de experiência.
Desde já agradeço.