Rendered attribute not working in p:dialog

Asked

Viewed 137 times

0

I need to render a form that is inside a panel in p:dialog and after I save the data, I want to hide it and render a p:fileUpload in p:dialog. But I can’t do it, I don’t know what’s wrong. The methods I call do not simply change the value of the Boolean attributes being used to render/hide the panels.

FULL 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="content">
    <f:metadata>
        <f:viewParam name="a" value="#{livroOrdemController.numeroArt}" valueChangeListener="#{livroOrdemController.recuperarNumeroArt}" />
    </f:metadata>

    <p:messages id="menssagens" autoUpdate="true" closable="true" />

    <h:form>
        <p:panel id="panelTermoDeAbertura" header="">

            <f:facet name="header">
                <h:outputText value="#{livroOrdemController.livroOrdem.dataCriacao}">
                    <f:convertDateTime pattern="dd/MM/yyyy" />
                </h:outputText>
                <h:outputText value=" - TERMO DE ABERTURA DO LIVRO DE ORDEM"/>
            </f:facet>

            <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"
                                 onclick="dialogRelato.show();"/>

            </h:panelGrid>

        </p:panel>

        <br />

        <p:dialog id="dialogRelato"
                  showEffect="fade" hideEffect="fade"
                  modal="true" header="Novo Relato"
                  widgetVar="dialogRelato" minHeight="40">

            <p:panel id="panelFormRelato" rendered="#{livroOrdemController.renderizarFormRelato()}">
                <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"
                                 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}"/>
                <br />
                <br />

                <p:commandButton value="Adicionar Relato"
                                 action="#{livroOrdemController.adicionarRelato()}"
                                 process="@this,dialogRelato"
                                 update="@([id$=panelFormRelato], [id$=uploadAnexoRelato])">


                </p:commandButton>

                <p:commandButton value="Cancelar"
                            onclick="dialogRelato.hide();" />
            </p:panel>

            <p:panel id="uploadAnexoRelato"
                     rendered="#{livroOrdemController.renderizarAnexoRelato()}">

                <p:fileUpload fileUploadListener="#{livroOrdemController.handleFileUploadRelato}"
                              allowTypes="/(\.|\/)(gif|png|jpe?g|pdf)$/"
                              sizeLimit="10000000"
                              label="Anexar Arquivos"
                              multiple="true"
                              mode="advanced"
                              auto="true"
                              showButtons="false"
                              process="@this"
                              dragDropSupport="true"/>

                <ui:repeat var="arquivo" value="#{livroOrdemController.arquivosRelatos}">
                    <p:column>

                        <p:commandButton actionListener="#{livroOrdemController.excluirArquivo(arquivo)}" icon="excluir" update="#{livroOrdemController.componentes}" />

                        <h:outputText value="#{arquivo.nomeArquivo}"/>

                    </p:column>
                </ui:repeat>

                <p:commandButton value="Enviar Anexos"
                                 action="#{livroOrdemController.restaurarDialogRelato()}"                                   
                                 oncomplete="dialogRelato.hide();"
                                 process="@this,dialogRelato"
                                 update="#{livroOrdemController.componentes}"/>

                <p:commandButton value="Cancelar"
                                 onclick="dialogRelato.hide();" />
            </p:panel>

       </p:dialog>

        <ui:repeat var="itemRelato" value="#{livroOrdemController.relatos}" varStatus="status">

                <p:panel id="panelRelatos">
                    <f:facet name="header">

                        <h:outputText value="#{itemRelato.dataOcorrencia}">
                            <f:convertDateTime pattern="dd/MM/yyyy" />
                        </h:outputText>
                        <h:outputText value=" - #{itemRelato.tipoRelato.descricao}"/>

                    </f:facet>

                    <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: "/>
                    </b>

                    <ui:repeat var="itemRetificacao" value="#{livroOrdemController.recuperarRetificacoes(itemRelato.idRelato)}"
                               varStatus="statusRetificacao">

                        <li>
                            <h:outputText value="#{itemRetificacao.descricao}"/>
                        </li>

                    </ui:repeat>

                    <br />

                    <p:commandButton value="Retificar Relato"
                                     update="#{livroOrdemController.componentes}"
                                     onclick="dialogRetificacao.show();">

                        <f:setPropertyActionListener value="#{itemRelato}" target="#{livroOrdemController.relatoASerRetificado}"/>

                    </p:commandButton>
                    <br />
                    <br />

                </p:panel>

                <br />

        </ui:repeat>

        <p:dialog id="dialogRetificacao" showEffect="fade" hideEffect="fade"
                  modal="true" header="Retificar/Complementar um Relato"
                  widgetVar="dialogRetificacao" minHeight="40">

            <p:panel>
                <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 id="descricaoRetificacao" value="#{livroOrdemController.descricaoRetificacao}"/>

                <br />

                <p:commandButton value="Retificar/Complementar Relato"
                                 process="@this,dialogRetificacao"
                                 action="#{livroOrdemController.retificarRelato()}"
                                 update="#{livroOrdemController.componentes}"/>

                <p:commandButton value="Cancelar"
                                 onclick="dialogRetificacao.hide();" />
            </p:panel>

            <p:panel>
                <b>
                    <h:outputLabel value="Anexo de Arquivos: "/>
                </b>
                <p:fileUpload fileUploadListener="#{livroOrdemController.handleFileUploadRetificacao}"
                          allowTypes="/(\.|\/)(gif|png|jpe?g|pdf)$/"
                          sizeLimit="10000000"
                          label="Anexar Arquivos"
                          multiple="true"
                          mode="advanced"
                          auto="true"
                          showButtons="false"
                          process="@this"
                          dragDropSupport="true"/>

                <p:commandButton value="Enviar Anexos"
                                 oncomplete="dialogRetificacao.hide();"
                                 process="@this,dialogRetificacao"
                                 action="#{livroOrdemController.retificarRelato()}"
                                 update="#{livroOrdemController.componentes}"/>

                <p:commandButton value="Cancelar"
                                 onclick="dialogRetificacao.hide();" />
            </p:panel>
        </p:dialog>

    </h:form>

</ui:define>

MANAGED BEAN

@ManagedBean
@ViewScoped
public class LivroOrdemController {
// Variaveis Ocultadas
public LivroOrdemController() {
}

@PostConstruct
public void inicializar() {
    relato = new Relato();
    retificacaoRelato = new RetificacaoRelato();
    currentStateDialogRelato = DIALOG_RELATO_STATE;
    currentStateDialogRetificacao = DIALOG_RETIFICACAO_STATE;
}
// Alguns getters e Setters ocultados 


public String getCurrentStateDialogRelato() {
    return currentStateDialogRelato;
}

public void setCurrentStateDialogRelato(String currentStateDialogRelato) {
    this.currentStateDialogRelato = currentStateDialogRelato;
}

public String getCurrentStateDialogRetificacao() {
    return currentStateDialogRetificacao;
}

public void setCurrentStateDialogRetificacao(String currentStateDialogRetificacao) {
    this.currentStateDialogRetificacao = currentStateDialogRetificacao;
}

// Alguns getters e Setters ocultados

public void alterarEstadoDialogRelato() {
    this.setCurrentStateDialogRelato(DIALOG_ANEXO_RELATO_STATE);
}

public void alterarEstadoDialogRetificacao() {
    this.setCurrentStateDialogRetificacao(DIALOG_ANEXO_RETIFICACAO_STATE);
}

public boolean renderizarAnexoRelato() {
    String state = this.getCurrentStateDialogRelato();

    return DIALOG_ANEXO_RELATO_STATE.equals(state);
}

public boolean renderizarFormRelato() {
    String state = this.getCurrentStateDialogRelato();

    return DIALOG_RELATO_STATE.equals(state);
}

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.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;
    dataOcorrencia = null;
}

public void retificarRelato() {
    retificacaoRelato.setRelato(relatoASerRetificado);
    retificacaoRelato.setDescricao(descricaoRetificacao);
    retificacaoRelatoDao.salvar(retificacaoRelato); 

    descricaoRetificacao = null;
}

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 List<RetificacaoRelato> recuperarRetificacoes(Long idRelato) 
{
    List<RetificacaoRelato> retificacoes = new ArrayList<RetificacaoRelato>();
    Map<String, Object> params = new HashMap<String, Object>();
    String queryRetificacoes = "SELECT rr.descricao FROM RetificacaoRelato rr "
            + "WHERE rr.relato_idrelato = :idrelato";
    params.put("idrelato", idRelato);

    List<Object> objects = objectDao.listPesqQueryUmParametro(queryRetificacoes, params);

    for (Object o : objects) {
        RetificacaoRelato retificacaoRelatoTemp = new RetificacaoRelato();
        retificacaoRelatoTemp.setDescricao((String) o);
        retificacoes.add(retificacaoRelatoTemp);
    }

    return retificacoes;
    }

   // HANDLE FILE UPLOADS OCULTADOS

   public void excluirArquivo(ArquivoRelato arquivoRelato) {
        this.arquivoRelato = arquivoRelato;
        ArquivoRelato ar = arquivoRelato;
        File f = new File(arquivoRelato.getCaminhoArquivo());
        f.delete();
        arquivoRelatoDao.excluir(this.arquivoRelato);
        arquivosRelatos.remove(ar);
   }

   public void restaurarDialogRelato() {
       currentStateDialogRelato = DIALOG_RELATO_STATE;
   }

   public void restaurarDialogRetificacao() {
       currentStateDialogRetificacao = DIALOG_RETIFICACAO_STATE;
   } 
   }
  • your dialog is inside an h:form? If yes, put it outside and do an h:form for the panelFormRelato and another h:form for the uploadAnexoRelato. See if this works.

  • Yes, it has a large form that encompasses the whole page

  • I tried, but no success.

  • I edited the question with the full view code

  • what scope is Voce using in your view? if you can post your full MB

  • @Viewscoped. I posted the code of the bean Managed

Show 1 more comment
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.