I cannot render a component after clicking a button

Asked

Viewed 75 times

0

I can’t render the include component that’s inside a panel, I want to render by clicking a button inside a datatable, but when I click the button nothing happens

View

Arts Aptas a Book of Order

<script type="text/javascript">    
    PrimeFaces.locales['pt_BR'] = {
        closeText: 'Fechar',
        prevText: 'Anterior',
        nextText: 'Próximo',
        monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
        monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
        dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
        dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab'],
        dayNamesMin: ['D', 'S', 'T', 'Q ', 'Q', 'S ', 'S'],
        weekHeader: 'Semana',
        FirstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: '',
        timeOnlyTitle: 'Só Horas',
        timeText: 'Tempo',
        hourText: 'Hora',
        minuteText: 'Minuto',
        secondText: 'Segundo',
        currentText: 'Data Atual',
        ampm: false,
        month: 'Mês',
        week: 'Semana',
        day: 'Dia',
        allDayText: 'Todo dia'
    };
</script>

<ui:define name="content">
    <h:form id="formArtsAptas">
        <p:dataTable value="#{artsAptasLivroOrdemController.artsAptas}" 
                 id="tableArtsAptas" 
                 rowKey="#{item.numeroArt}" var="item"
                 emptyMessage="Você não possui ARTs aptas a Livro de Ordem"
                 paginator="true" rows="20">

            <f:facet name="header">
                ARTs Aptas a Livro de Ordem
            </f:facet>

            <p:column headerText="Numero da ART" sortBy="#{item.numeroArt}">
                  <h:outputText value="#{item.numeroArt}" />
            </p:column>

            <p:column headerText="Tipo de ART" sortBy="#{item.tipoArt.descricao}">
                  <h:outputText value="#{item.tipoArt.descricao}" />
            </p:column>

            <p:column headerText="Subtipo de ART" sortBy="#{item.subtipoArt.descricao}">
                  <h:outputText value="#{item.subtipoArt.descricao}" />
            </p:column>

            <p:column headerText="Data de Elaboração" sortBy="#{item.dataElaboracao}">
                  <h:outputText value="#{item.dataElaboracao}">
                        <f:convertDateTime pattern="dd/MM/yyyy" />
                  </h:outputText>
            </p:column>

            <p:column headerText="Profissional Contratado" sortBy="#{item.nomeProfissionalContratado}">
            </p:column>

            <p:column headerText="Empresa Contratada" sortBy="#{item.nomeEmpresaContratada}">
                  <h:outputText value="#{item.nomeEmpresaContratada}" />
            </p:column>

            <p:column headerText="Contratante" sortBy="#{item.contrato.identificacaoContratante.nome}">
                  <h:outputText value="#{item.contrato.identificacaoContratante.nome}" />
            </p:column>

            <p:column headerText="Proprietário" sortBy="#{item.nomeProprietario}">
                  <h:outputText value="#{item.nomeProprietario}" />
            </p:column>

            <p:column headerText="Criar/Ver Livro de Ordem">
                <p:commandLink id="criarLivroOrdemButton"
                               immediate="true"
                               onclick="dialogLivroOrdem.show();"
                               action="#{artsAptasLivroOrdemController.criarLivroOrdem()}"
                               update="#{artsAptasLivroOrdemController.componentes}">

                    <f:setPropertyActionListener value="#{item}" target="#{artsAptasLivroOrdemController.artApta}"/>

                    <p:graphicImage alt="Criar/Ver" value="../imagens/site/edit.gif" />

                </p:commandLink>

                <p:commandLink immediate="true"
                               update="#{livroOrdemController.componentes}"
                               action="#{artsAptasLivroOrdemController.exibirLivroOrdem()}">

                    <f:setPropertyActionListener value="#{item}" target="#{livroOrdemController.art}"/>

                    <p:graphicImage alt="Ver Livro de Ordem" value="../imagens/site/detail.png" />

                </p:commandLink>

            </p:column>

        </p:dataTable>

        <p:dialog id="dialogLivroOrdem"
                  showEffect="fade" hideEffect="fade"
                  modal="true" header="Novo Livro de Ordem"
                  widgetVar="dialogLivroOrdem" minHeight="40">

            <h:form id="formCriarNovoLivro">

                <b>
                    <h:outputLabel value="Numero da ART: " />
                </b>
                <h:outputText id="numeroArt" value="#{artsAptasLivroOrdemController.artApta.numeroArt}" />
                <br />
                <br />

                <b>
                    <h:outputLabel value="Nome do Proprietário: " />
                </b>
                <h:outputText id="nomeProprietario" value="#{artsAptasLivroOrdemController.artApta.nomeProprietario}" />
                <br />
                <br />

                <b>
                    <h:outputLabel value="Endereço da Obra: " />
                </b>
                <h:outputText id="enderecoObra" value="#{artsAptasLivroOrdemController.artApta.enderecoObraServico.tipoLogradouro} #{artsAptasLivroOrdemController.artApta.enderecoObraServico.logradouro}, 
                              Nº #{artsAptasLivroOrdemController.artApta.enderecoObraServico.numero}, 
                              CEP: #{artsAptasLivroOrdemController.artApta.enderecoObraServico.cep}, 
                              #{artsAptasLivroOrdemController.artApta.enderecoObraServico.bairro}, 
                              #{artsAptasLivroOrdemController.artApta.enderecoObraServico.cidade} - #{artsAptasLivroOrdemController.artApta.enderecoObraServico.uf}" />
                <br />
                <br />

                <b>
                   <h:outputLabel for="dataRealInicioObra" value="Data Real do Início da Obra*: " />
                </b>
                <p:calendar id="dataRealInicioObra"
                            required="true"
                            requiredMessage="Campo Obrigatório"
                            pattern="dd/MM/yyyy"
                            locale="pt_BR"
                            showOn="button"
                            value="#{artsAptasLivroOrdemController.dataRealInicioObra}"/>
                <br />
                <br />

                <b>
                    <h:outputLabel for="dataPrevistaConclusaoObra" value="Data Prevista para Conclusão da Obra*: " />
                </b>
                <p:calendar id="dataPrevistaConclusaoObra"
                            required="true"
                            requiredMessage="Campo Obrigatório"
                            pattern="dd/MM/yyyy"
                            locale="pt_BR"
                            showOn="button"
                            value="#{artsAptasLivroOrdemController.dataPrevistaConclusaoObra}"/>      
                <br />
                <br />

                <p:commandButton value="Criar Novo Livro"
                                 action="#{artsAptasLivroOrdemController.criarLivroOrdem()}"                                   
                                 oncomplete="dialogLivroOrdem.hide();"
                                 update="#{artsAptasLivroOrdemController.componentes}">

                    <f:setPropertyActionListener value="#{artsAptasLivroOrdemController.artApta}" target="#{livroOrdemController.art}"/>    

                </p:commandButton>

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

            </h:form>

        </p:dialog>

    </h:form>

    <p:panel rendered="#{artsAptasLivroOrdemController.renderizaLivroOrdem}">

        <ui:include id="livroOrdem" src="livroOrdem.xhtml" />

    </p:panel>  

</ui:define>

Controller

@ManagedBean
@ViewScoped
public class ArtsAptasLivroOrdemController implements Serializable {    
@EJB
private ArtDao artDao;
@EJB
private LivroOrdemDao livroOrdemDao;
@EJB
private ObjectDao objectDao;

private List<Art> artsAptas = new ArrayList<Art>();
private Pessoa pessoa;
private LivroOrdem livroOrdem;
private Date dataRealInicioObra;
private Date dataPrevistaConclusaoObra;
private Art artApta;
private String componentes = "@([id$=numeroArt], [id$=nomeProprietario], [id$=enderecoObra], [id$=dataRealInicioObra], [id$=dataPrevistaConclusaoObra])";
private boolean renderizaLivroOrdem;


public ArtsAptasLivroOrdemController() {
}

@PostConstruct
public void inicializar() {
    artsAptas.clear();
    FacesContext context = FacesContext.getCurrentInstance();
    ELResolver resolver = context.getApplication().getELResolver();
    LoginControllerOnline controller = new LoginControllerOnline();
    controller = (LoginControllerOnline) resolver.getValue(context.getELContext(), null, "loginControllerOnline");
    pessoa = controller.getPessoa();

    if(pessoa instanceof Profissional) {
        Profissional profissional = (Profissional) pessoa;
        Map<String, Object> params = new HashMap<String, Object>();
        String queryArt = "SELECT a.numeroart, a.dataElaboracao, a.nomeProprietario, a.cepobraservico, a.tipologradouroobraservico, a.logradouroobraservico, a.numeroobraservico, a.bairroobraservico, a.cidadeobraservico, a.ufobraservico, "
                + "p.nome as nomeprofissional, pe.nome as nomeempresa, "
                + "(SELECT nome FROM IdentificacaoContratoArt idcontrato WHERE idcontrato.numeroart = a.numeroart AND sequencialcontrato = 1 AND sequencialidentificacao = 1) AS nomecontratante, "
                + "t.idTipoArt, t.descricao AS tipoArt, st.idSubtipoArt, st.descricao AS subtipoArt, "
                + "a.nomeProfissionalContratado, a.nomeEmpresaContratada "
                + "FROM Art a "
                + "LEFT JOIN pessoa p ON p.codigo = a.codigoprofissionalcontratado "
                + "LEFT JOIN pessoa pe ON pe.codigo = a.codigoempresacontratada "
                + "LEFT JOIN empresa e ON e.codigo = pe.codigo "
                + "LEFT JOIN TipoArt t ON t.idTipoArt = a.tipoArt_idTipoArt "
                + "LEFT JOIN SubtipoArt st ON st.idSubtipoArt = a.subtipoArt_idSubtipoArt "
                + "WHERE (a.codigoprofissionalcontratado = :codigo AND a.databaixa IS NULL) AND (a.datapagamento IS NOT NULL OR a.valortaxa = 0)";            

        params.put("codigo", profissional.getCodigo());

        List<Object[]> arts = objectDao.listPesqQuery(queryArt, params);

        for (Object[] o : arts) {
            Art artTemp = new Art();
            artTemp.setNumeroArt((String) o[0]);
            artTemp.setDataElaboracao((Date) o[1]);
            artTemp.setNomeProprietario((String) o[2]);
            artTemp.getEnderecoObraServico().setCep((String) o[3]);
            artTemp.getEnderecoObraServico().setTipoLogradouro((String) o[4]);
            artTemp.getEnderecoObraServico().setLogradouro((String) o[5]);
            artTemp.getEnderecoObraServico().setNumero((String) o[6]);
            artTemp.getEnderecoObraServico().setBairro((String) o[7]);
            artTemp.getEnderecoObraServico().setCidade((String) o[8]);
            artTemp.getEnderecoObraServico().setUf((String) o[9]);
            artTemp.getProfissionalContratado().setNome((String) o[10]);
            artTemp.getEmpresaContratada().setNome((String) o[11]);

            ContratoArt c = new ContratoArt(artTemp, 1L);
            IdentificacaoContratoArt i = new IdentificacaoContratoArt(c, 1L);
            i.setTipoIdentificacao(TipoIdentificacao.CONTRATANTE);
            i.setNome((String) o[12]);
            c.getIdentificacoes().add(i);
            artTemp.getContratos().add(c);

            artTemp.setTipoArt(new TipoArt());
            BigInteger idTipoArt = (BigInteger) o[13];

            if (idTipoArt != null) {
                artTemp.getTipoArt().setIdTipoArt(idTipoArt.longValue());
            }

            artTemp.getTipoArt().setDescricao((String) o[14]);
            artTemp.setSubtipoArt(new SubtipoArt());
            BigInteger idSubtipoArt = (BigInteger) o[15];

            if (idSubtipoArt != null) {
                artTemp.getSubtipoArt().setIdSubtipoArt(idSubtipoArt.longValue());
            }

            artTemp.getSubtipoArt().setDescricao((String) o[16]);
            artTemp.setNomeProfissionalContratado((String) o[17]);
            artTemp.setNomeEmpresaContratada((String) o[18]);
            artsAptas.add(artTemp);
        }
    }
}

public ArtDao getArtDao() {
    return artDao;
}

public void setArtDao(ArtDao artDao) {
    this.artDao = artDao;
}

public ObjectDao getObjectDao() {
    return objectDao;
}

public void setObjectDao(ObjectDao objectDao) {
    this.objectDao = objectDao;
}

public List<Art> getArtsAptas() {
    return artsAptas;
}

public void setArtsAptas(List<Art> artsAptas) {
    this.artsAptas = artsAptas;
}

public Pessoa getPessoa() {
    return pessoa;
}

public void setPessoa(Pessoa pessoa) {
    this.pessoa = pessoa;
}  

public LivroOrdem getLivroOrdem() {
    return livroOrdem;
}

public void setLivroOrdem(LivroOrdem livroOrdem) {
    this.livroOrdem = livroOrdem;
}  

public LivroOrdemDao getLivroOrdemDao() {
    return livroOrdemDao;
}

public void setLivroOrdemDao(LivroOrdemDao livroOrdemDao) { 
    this.livroOrdemDao = livroOrdemDao;
}

public Date getDataRealInicioObra() {
    return dataRealInicioObra;
}

public void setDataRealInicioObra(Date dataRealInicioObra) {
    this.dataRealInicioObra = dataRealInicioObra;
}

public Date getDataPrevistaConclusaoObra() {
    return dataPrevistaConclusaoObra;
}

public void setDataPrevistaConclusaoObra(Date dataPrevistaConclusaoObra) {
    this.dataPrevistaConclusaoObra = dataPrevistaConclusaoObra;
}

public Art getArtApta() {
    return artApta;
}

public void setArtApta(Art artApta) {
    this.artApta = artApta;
}

public String getComponentes() {
    return componentes;
}

public void setComponentes(String componentes) {
    this.componentes = componentes;
}

public boolean getRenderizaLivroOrdem() {
    return renderizaLivroOrdem;
}

public void setRenderizaLivroOrdem(boolean renderizaLivroOrdem) {
    this.renderizaLivroOrdem = renderizaLivroOrdem;
}

public void exibirLivroOrdem() {
    this.setRenderizaLivroOrdem(true);
}

public void criarLivroOrdem() {
    livroOrdem = new LivroOrdem();
    livroOrdem.setArt(artApta);
    livroOrdem.setDataRealInicioObra(dataRealInicioObra);
    livroOrdem.setDataPrevistaConclusaoObra(dataPrevistaConclusaoObra);    
    livroOrdemDao.salvar(livroOrdem);

    this.dataRealInicioObra = null;
    this.dataPrevistaConclusaoObra = null;    
}    

}

  • tried to update this panel? <p:panel rendered="#{artsAptasLivroOrdemController.renderizaLivroOrdem}">

  • Yes, but everything stayed the same

1 answer

0

Try to involve the p:panel (dynamically rendered) in a div (h:panelGroup) and on your button you put an update on "panel".

You may have tried to put the id directly on p:panel and not have appeared, it happens because since it was not rendered the component also did not exist this id yet. So you need to update the outside component and the inside to have the rendering rule.

<h:panelGroup id="panel">
   <p:panel rendered="#{artsAptasLivroOrdemController.renderizaLivroOrdem}">
      <ui:include id="livroOrdem" src="livroOrdem.xhtml" />
   </p:panel>  
</h:panelGroup>

Browser other questions tagged

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