I have two methods in two different dialogs: adicionarRelato
and RetificarRelato
.
adicionarRelato
perfectly executes the command button
click on the first dialog. But the retificarRelato
of the second dialog is simply not called, and nothing happens.
View :
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:jsp="http://java.sun.com/JSP/Page"
template="template.xhtml">
<ui:define name="titulo">
Livro de Ordem
</ui:define>
<ui:define name="content">
<f:metadata>
<f:viewParam name="a" value="#{livroOrdemController.numeroArt}" valueChangeListener="#{livroOrdemController.recuperarNumeroArt}" />
</f:metadata>
<p:messages id="messages" autoUpdate="true" closable="true" />
<h:form>
<p:panel id="panelTermoDeAbertura" header="TERMO DE ABERTURA DO LIVRO DE ORDEM">
<h:panelGrid columns="2" cellpadding="10">
<h:outputLabel value="Numero da ART: "/>
<h:outputText
value="#{livroOrdemController.art.numeroArt}"/>
<h:outputLabel value="Nome do Proprietário: "/>
<h:outputText
value="#{livroOrdemController.art.nomeProprietario}"/>
<h:outputLabel value="Endereço da Obra: "/>
<h:outputText
value="#{livroOrdemController.art.enderecoObraServico.tipoLogradouro} #{livroOrdemController.art.enderecoObraServico.logradouro},
Nº #{livroOrdemController.art.enderecoObraServico.numero},
CEP: #{livroOrdemController.art.enderecoObraServico.cep},
#{livroOrdemController.art.enderecoObraServico.bairro},
#{livroOrdemController.art.enderecoObraServico.cidade} - #{livroOrdemController.art.enderecoObraServico.uf}"/>
<h:outputLabel value="Data Real do Início da Obra: "/>
<h:outputText
value="#{livroOrdemController.livroOrdem.dataRealInicioObra}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
<h:outputLabel value="Data Prevista para Conclusão da Obra: "/>
<h:outputText
value="#{livroOrdemController.livroOrdem.dataPrevistaConclusaoObra}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
<p:commandButton value="Adicionar Relato"
immediate="true"
onclick="dialogRelato.show();"/>
</h:panelGrid>
</p:panel>
<br />
<p:dialog showEffect="fade" hideEffect="fade"
modal="true" header="Novo Relato"
widgetVar="dialogRelato" minHeight="40">
<b>
<h:outputLabel value="Tipo de Relato: " />
</b>
<h:selectOneMenu style="height: 20px; background-color: #ffffff;"
value="#{livroOrdemController.tipoRelatoSelecionado}"
title="Tipo de Relato"
converter="tipoRelatoConverter">
<f:selectItems value="#{livroOrdemController.preencherComboTiposRelatos()}"/>
</h:selectOneMenu>
<br />
<br />
<b>
<h:outputLabel for="calendarDataOcorrencia" value="Data da Ocorrencia: " />
</b>
<p:calendar id="calendarDataOcorrencia"
pattern="dd/MM/yyyy"
locale="pt_BR"
showOn="button"
value="#{livroOrdemController.dataOcorrencia}"/>
<br />
<br />
<b>
<h:outputLabel value="Fase da Obra/Serviço: " />
</b>
<h:selectOneMenu style="height: 20px; background-color: #ffffff;"
value="#{livroOrdemController.faseObraServicoSelecionada}"
title="Fase da Obra/Serviço"
required="true"
requiredMessage="Fase da Obra/Serviço: Preenchimento Obrigatório"
converter="faseObraServicoConverter">
<f:selectItems value="#{livroOrdemController.preencherComboFaseObraServico()}"/>
</h:selectOneMenu>
<br />
<br />
<b>
<h:outputLabel for="calendarInicioFase" value="Inicio da Fase: " />
</b>
<p:calendar id="calendarInicioFase"
pattern="dd/MM/yyyy"
locale="pt_BR"
showOn="button"
value="#{livroOrdemController.dataIncioFase}"/>
<br />
<br />
<b>
<h:outputLabel for="calendarFimFase" value="Términio da Fase: " />
</b>
<p:calendar id="calendarFimFase"
pattern="dd/MM/yyyy"
locale="br"
showOn="button"
value="#{livroOrdemController.dataTerminioFase}"/>
<br />
<br />
<b>
<h:outputLabel for="inputDescricaoRelato" value="Descrição: " />
</b>
<br />
<h:inputTextarea id="inputDescricaoRelato"
value="#{livroOrdemController.descricao}"
required="true"
requiredMessage="Descrição: Preenchimento Obrigatório"/>
<br />
<br />
<p:commandButton value="Adicionar Relato"
action="#{livroOrdemController.adicionarRelato()}"
oncomplete="dialogRelato.hide();"
immediate="false"
update="#{artsAptasLivroOrdemController.componentes}"/>
<p:commandButton value="Cancelar"
onclick="dialogRelato.hide();" />
</p:dialog>
</h:form>
<h:form>
<ui:repeat var="itemRelato" value="#{livroOrdemController.relatos}" varStatus="status">
<p:panel id="panelRelatos">
<h:outputLabel value="Data do Relato: "/>
<h:outputText value="#{itemRelato.dataOcorrencia}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
<br />
<h:outputLabel value="Tipo do Relato: "/>
<h:outputText value="#{itemRelato.tipoRelato.descricao}"/>
<br />
<h:outputLabel value="Fase da Obra: "/>
<h:outputText value="#{itemRelato.faseObraServico.descricao}"/>
<br />
<h:outputLabel value="Inicio da Fase: "/>
<h:outputText value="#{itemRelato.dataIncioFase}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
<br />
<h:outputLabel value="Términio da Fase: "/>
<h:outputText value="#{itemRelato.dataTerminioFase}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
<br />
<h:outputLabel value="Descrição: "/><br />
<h:outputText value="#{itemRelato.descricao}"/>
<br />
<b>
<h:outputLabel value="Retificações/Complementos: "/>
<ui:repeat var="itemRetificacao" value="#{livroOrdemController.retificacaoRelatos}"
varStatus="statusRetificacao">
<li>
<h:outputText value="#{itemRetificacao.descricao}"/>
</li>
</ui:repeat>
</b>
<br />
<p:commandButton value="Retificar Relato"
update="#{livroOrdemController.componentes}"
onclick="dialogRetificacao.show();"
action="#{livroOrdemController.retificarRelato()}">
<f:setPropertyActionListener value="#{itemRetificacao}" target="#{livroOrdemController.relatoASerRetificado}"/>
</p:commandButton>
<br />
<br />
</p:panel>
<br />
</ui:repeat>
<p:dialog showEffect="fade" hideEffect="fade"
modal="true" header="Retificar/Complementar um Relato"
widgetVar="dialogRetificacao" minHeight="40">
<b>
<h:outputLabel value="Tipo de Relato: " />
</b>
<h:inputText id="tipoRelato" disabled="true" value="#{livroOrdemController.relatoASerRetificado.tipoRelato.descricao}"/>
<br />
<b>
<h:outputLabel value="Data da Ocorrência: " />
</b>
<h:inputText id="dataOcorrencia" disabled="true" value="#{livroOrdemController.relatoASerRetificado.dataOcorrencia}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
<br />
<b>
<h:outputLabel value="Fase da Obra/Serviço: " />
</b>
<h:inputText id="faseObraServico" disabled="true" value="#{livroOrdemController.relatoASerRetificado.faseObraServico.descricao}"/>
<br />
<b>
<h:outputLabel value="Inicio da Fase: " />
</b>
<h:inputText id="inicioFase" disabled="true" value="#{livroOrdemController.relatoASerRetificado.dataIncioFase}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
<br />
<b>
<h:outputLabel value="Términio da Fase: " />
</b>
<h:inputText id="terminioFase" disabled="true" value="#{livroOrdemController.relatoASerRetificado.dataTerminioFase}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
<br />
<b>
<h:outputLabel value="Descrição: " />
</b>
<h:inputTextarea value="#{livroOrdemController.descricaoRetificacao}"/>
<br />
<p:commandButton value="Retificar/Complementar Relato"
oncomplete="dialogRelato.hide();"
action="#{livroOrdemController.retificarRelato()}"/>
<p:commandButton value="Cancelar"
onclick="dialogRetificacao.hide();" />
</p:dialog>
</h:form>
</ui:define>
</ui:composition>
Controller :
@ManagedBean
@ViewScoped
public class LivroOrdemController {
@EJB
private ObjectDao objectDao;
@EJB
private RelatoDao relatoDao;
@EJB
private TipoRelatoDao tipoRelatoDao;
@EJB
private FaseObraServicoDao faseObraServicoDao;
@EJB
private LivroOrdemDao livroOrdemDao;
@EJB
private RetificacaoRelatoDao retificacaoRelatoDao;
private Art art;
private String componentes = "@([id$=panelTermoDeAbertura], [id$=panelRelatos], "
+ "[id$=tipoRelato], [id$=dataOcorrencia], [id$=faseObraServico], "
+ "[id$=inicioFase], [id$=terminioFase])";
private LivroOrdem livroOrdem;
private String numeroArt;
private Date dataOcorrencia;
private String descricao;
private String descricaoRetificacao;
private FaseObraServico faseObraServicoSelecionada;
private Date dataIncioFase;
private Date dataTerminioFase;
private TipoRelato tipoRelatoSelecionado;
private Relato relato;
private RetificacaoRelato retificacaoRelato;
private Relato relatoASerRetificado;
private List<Relato> relatos = new ArrayList<Relato>();
private boolean renderizaDataInicioFase;
private boolean renderizaDataTerminioFase;
private boolean renderizaMenuFaseObra;
private List<RetificacaoRelato> retificacaoRelatos;
public LivroOrdemController() {
}
public Art getArt() {
return art;
}
public void setArt(Art art) {
this.art = art;
}
public String getComponentes() {
return componentes;
}
public void setComponentes(String componentes) {
this.componentes = componentes;
}
public LivroOrdem getLivroOrdem() {
return livroOrdem;
}
public void setLivroOrdem(LivroOrdem livroOrdem) {
this.livroOrdem = livroOrdem;
}
public ObjectDao getObjectDao() {
return objectDao;
}
public void setObjectDao(ObjectDao objectDao) {
this.objectDao = objectDao;
}
public String getNumeroArt() {
return numeroArt;
}
public void setNumeroArt(String numeroArt) {
this.numeroArt = numeroArt;
}
public Date getDataOcorrencia() {
return dataOcorrencia;
}
public void setDataOcorrencia(Date dataOcorrencia) {
this.dataOcorrencia = dataOcorrencia;
}
public RelatoDao getRelatoDao() {
return relatoDao;
}
public void setRelatoDao(RelatoDao relatoDao) {
this.relatoDao = relatoDao;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public FaseObraServico getFaseObraServicoSelecionada() {
return faseObraServicoSelecionada;
}
public void setFaseObraServicoSelecionada(FaseObraServico faseObraServicoSelecionada) {
this.faseObraServicoSelecionada = faseObraServicoSelecionada;
}
public Date getDataIncioFase() {
return dataIncioFase;
}
public void setDataIncioFase(Date dataIncioFase) {
this.dataIncioFase = dataIncioFase;
}
public Date getDataTerminioFase() {
return dataTerminioFase;
}
public void setDataTerminioFase(Date dataTerminioFase) {
this.dataTerminioFase = dataTerminioFase;
}
public TipoRelato getTipoRelatoSelecionado() {
return tipoRelatoSelecionado;
}
public void setTipoRelatoSelecionado(TipoRelato tipoRelatoSelecionado) {
this.tipoRelatoSelecionado = tipoRelatoSelecionado;
}
public RetificacaoRelatoDao getRetificacaoRelatoDao() {
return retificacaoRelatoDao;
}
public void setRetificacaoRelatoDao(RetificacaoRelatoDao retificacaoRelatoDao) {
this.retificacaoRelatoDao = retificacaoRelatoDao;
}
public Relato getRelato() {
return relato;
}
public void setRelato(Relato relato) {
this.relato = relato;
}
public List<Relato> getRelatos() {
return relatos;
}
public void setRelatos(List<Relato> relatos) {
this.relatos = relatos;
}
public TipoRelatoDao getTipoRelatoDao() {
return tipoRelatoDao;
}
public void setTipoRelatoDao(TipoRelatoDao tipoRelatoDao) {
this.tipoRelatoDao = tipoRelatoDao;
}
public FaseObraServicoDao getFaseObraServicoDao() {
return faseObraServicoDao;
}
public void setFaseObraServicoDao(FaseObraServicoDao faseObraServicoDao) {
this.faseObraServicoDao = faseObraServicoDao;
}
public LivroOrdemDao getLivroOrdemDao() {
return livroOrdemDao;
}
public void setLivroOrdemDao(LivroOrdemDao livroOrdemDao) {
this.livroOrdemDao = livroOrdemDao;
}
public RetificacaoRelato getRetificacaoRelato() {
return retificacaoRelato;
}
public void setRetificacaoRelato(RetificacaoRelato retificacaoRelato) {
this.retificacaoRelato = retificacaoRelato;
}
public String getDescricaoRetificacao() {
return descricaoRetificacao;
}
public void setDescricaoRetificacao(String descricaoRetificacao) {
this.descricaoRetificacao = descricaoRetificacao;
}
public Relato getRelatoASerRetificado() {
return relatoASerRetificado;
}
public List<RetificacaoRelato> getRetificacaoRelatos() {
return retificacaoRelatos;
}
public void setRetificacaoRelatos(List<RetificacaoRelato> retificacaoRelatos) {
this.retificacaoRelatos = retificacaoRelatos;
}
public void setRelatoASerRetificado(Relato relatoASerRetificado) {
this.relatoASerRetificado = relatoASerRetificado;
}
public boolean isRenderizaDataInicioFase() {
return renderizaDataInicioFase;
}
public void setRenderizaDataInicioFase(boolean renderizaDataInicioFase) {
this.renderizaDataInicioFase = renderizaDataInicioFase;
}
public boolean isRenderizaDataTerminioFase() {
return renderizaDataTerminioFase;
}
public void setRenderizaDataTerminioFase(boolean renderizaDataTerminioFase) {
this.renderizaDataTerminioFase = renderizaDataTerminioFase;
}
public boolean isRenderizaMenuFaseObra() {
return renderizaMenuFaseObra;
}
public void setRenderizaMenuFaseObra(boolean renderizaMenuFaseObra) {
this.renderizaMenuFaseObra = renderizaMenuFaseObra;
}
public void recuperarNumeroArt(ValueChangeEvent valueChangeEvent) {
numeroArt = valueChangeEvent.getNewValue().toString();
recuperarLivroOrdem();
recuperarRelatos();
recuperarArt();
}
public void recuperarArt() {
Map<String, Object> params = new HashMap<String, Object>();
Art artTemp = new Art();
String queryArt = "SELECT a.numeroart, a.nomeProprietario, a.cepobraservico, a.tipologradouroobraservico, "
+ "a.logradouroobraservico, a.numeroobraservico, a.bairroobraservico, a.cidadeobraservico, a.ufobraservico, "
+ "a.databaixa "
+ "FROM Art a WHERE a.numeroart = :numeroart";
params.put("numeroart", numeroArt);
Object[] object = objectDao.pesqQuery(queryArt, params);
artTemp.setNumeroArt((String) object[0]);
artTemp.setNomeProprietario((String) object[1]);
artTemp.getEnderecoObraServico().setCep((String) object[2]);
artTemp.getEnderecoObraServico().setTipoLogradouro((String) object[3]);
artTemp.getEnderecoObraServico().setLogradouro((String) object[4]);
artTemp.getEnderecoObraServico().setNumero((String) object[5]);
artTemp.getEnderecoObraServico().setBairro((String) object[6]);
artTemp.getEnderecoObraServico().setCidade((String) object[7]);
artTemp.getEnderecoObraServico().setUf((String) object[8]);
artTemp.setDataBaixa((Date) object[9]);
art = artTemp;
}
public void recuperarLivroOrdem() {
Map<String, Object> params = new HashMap<String, Object>();
String queryLivroOrdem = "SELECT lo FROM LivroOrdem lo WHERE art_numeroart = :numeroart";
params.put("numeroart", numeroArt);
livroOrdem = livroOrdemDao.pesqParam(queryLivroOrdem, params);
}
public void adicionarRelato() {
relato = new Relato();
relato.setTipoRelato(tipoRelatoSelecionado);
relato.setDataOcorrencia(dataOcorrencia);
relato.setFaseObraServico(faseObraServicoSelecionada);
relato.setDataIncioFase(dataIncioFase);
relato.setDataTerminioFase(dataTerminioFase);
relato.setDescricao(descricao);
relato.setLivroOrdem(livroOrdem);
relatoDao.salvar(relato);
dataIncioFase = null;
dataTerminioFase = null;
}
public void retificarRelato() {
retificacaoRelato = new RetificacaoRelato();
retificacaoRelato.setRelato(relatoASerRetificado);
retificacaoRelato.setDescricao(descricaoRetificacao);
retificacaoRelatoDao.salvar(retificacaoRelato);
}
public SelectItem[] preencherComboTiposRelatos() {
SelectItem[] options = null;
String query = "SELECT tr FROM TipoRelato tr";
List<TipoRelato> tipoRelatos = tipoRelatoDao.listPesq(query);
if (tipoRelatos != null && tipoRelatos.size() > 0) {
int i = 0;
options = new SelectItem[tipoRelatos.size() + 1];
options[i++] = new SelectItem(null, "Selecione...");
for (TipoRelato tr : tipoRelatos) {
options[i++] = new SelectItem(tr, tr.getDescricao());
}
}
return options;
}
public SelectItem[] preencherComboFaseObraServico() {
SelectItem[] options = null;
String query = "SELECT fos FROM FaseObraServico fos";
List<FaseObraServico> faseObraServicos = faseObraServicoDao.listPesq(query);
if (faseObraServicos != null && faseObraServicos.size() > 0) {
int i = 0;
options = new SelectItem[faseObraServicos.size() + 1];
options[i++] = new SelectItem(null, "Selecione...");
for (FaseObraServico fo : faseObraServicos) {
options[i++] = new SelectItem(fo, fo.getDescricao());
}
}
return options;
}
public void recuperarRelatos() {
Map<String, Object> params = new HashMap<String, Object>();
String queryRelato = "SELECT r.idRelato, r.dataOcorrencia, r.dataIncioFase, r.dataTerminioFase, r.descricao AS descricaoRelato, "
+ "tr.descricao AS tiporelato, fos.descricao AS faseobraservico "
+ "FROM Relato r "
+ "LEFT JOIN TipoRelato tr ON tr.idTipoRelato = r.tiporelato_idtiporelato "
+ "LEFT JOIN FaseObraServico fos ON fos.idFaseObraServico = r.faseobraservico_idfaseobraservico "
+ "WHERE r.livroordem_idlivroordem = :idlivroordem ORDER BY dataocorrencia DESC";
params.put("idlivroordem", livroOrdem.getIdLivroOrdem());
List<Object[]> objects = objectDao.listPesqQuery(queryRelato, params);
for (Object[] o : objects) {
Relato relatoTemp = new Relato();
BigInteger id = (BigInteger) o[0];
relatoTemp.setIdRelato(id.longValue());
relatoTemp.setDataOcorrencia((Date) o[1]);
relatoTemp.setDataIncioFase((Date) o[2]);
relatoTemp.setDataTerminioFase((Date) o[3]);
relatoTemp.setDescricao((String) o[4]);
relatoTemp.setTipoRelato(new TipoRelato());
relatoTemp.getTipoRelato().setDescricao((String) o[5]);
relatoTemp.setFaseObraServico(new FaseObraServico());
relatoTemp.getFaseObraServico().setDescricao((String) o[6]);
relatos.add(relatoTemp);
}
}
public void recuperarRetificacoes() {
Map<String, Object> params = new HashMap<String, Object>();
String queryRetificacoes = "SELECT rr.descricao FROM RetificacaoRelato rr"
+ "WHERE rr.relato_idrelato = :idrelato";
params.put("idrelato", relatoASerRetificado.getIdRelato());
List<Object[]> objects = objectDao.listPesqQuery(queryRetificacoes, params);
for (Object[] o : objects) {
RetificacaoRelato retificacaoRelatoTemp = new RetificacaoRelato();
retificacaoRelatoTemp.setDescricao((String) o[0]);
retificacaoRelatos.add(retificacaoRelatoTemp);
}
}
public void onSelectMenuTipoRelatoChange() {
if(tipoRelatoSelecionado.getDescricao().equals("Visitas e Orientações Técnicas") ||
tipoRelatoSelecionado.getDescricao().equals("Interrupções dos Trabalhos") ||
tipoRelatoSelecionado.getDescricao().equals("Prestadores de Serviços")) {
renderizaDataInicioFase = true;
renderizaDataTerminioFase = true;
}
}
}