Method not called when using command button

Asked

Viewed 74 times

0

I have two methods in two different dialogs: adicionarRelato and RetificarRelato.

The adicionarRelato performs perfectly at the click of command button in the first dialog. But the retificarRelato of the second dialog simply is 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;
        }
    }
}

1 answer

0

Put this on your button

immediate="true"

Browser other questions tagged

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