How to pass a parameter between two views with @ViewScoped

0

I need to pass an id of an object between views, the beans of both are view scoped, I'm trying to pass via f: param, but I can not. The value always gets null in the other view

View 1

<ui:define name="titulo">
        ARTs Aptas a Livro de Ordem
</ui:define>

<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>
        <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();"
                               update="#{artsAptasLivroOrdemController.componentes}">

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

                    <f:param name="numeroArt" value="#{item.numeroArt}" />

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

                </p:commandLink>

                <p:commandLink immediate="true"
                               update="#{livroOrdemController.componentes}"
                               action="livroOrdem.xhtml?faces-redirect=true">

                    <f:param name="numeroArt" value="#{item.numeroArt}"/>

                    <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="dataPrevistaConclusaoObra" value="Data Prevista para Conclusão 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"/>
                <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>

</ui:define>

View 2

<ui:define name="titulo">
    Livro de Ordem
</ui:define>

<ui:define name="content">

    <f:metadata>
        <f:viewParam name="i" value="#{livroOrdemController.numeroArt}" />
    </f:metadata>
    <h:form>
    <p:panel header="DADOS DO LIVRO DE ORDEM">

        <h:panelGrid columns="2" cellpadding="10">

            <h:outputLabel value="Numero da ART: "/>

            <h:outputText
                id="numeroArt1"
                value="#{livroOrdemController.numeroArt}"/>          

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

            <h:outputLabel value="Endereço da Obra: "/>
            <h:outputText
                id="enderecoObra1"
                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}"/>

           <p:commandButton value="Adicionar Relato"
                            onclick="dialogRelato.show();"/>

        </h:panelGrid>

    </p:panel>

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

            <h:form id="formCriarNovoLivro">

                <b>
                    <h:outputLabel value="Tipo de Relato: " />
                </b>
                <h:inputText id="tipoRelato" value="#{artsAptasLivroOrdemController.tipoRelato}" />
                <br />
                <br />

                <b>
                    <h:outputLabel for="dataRelato" value="Data do Relato: " />
                </b>
                <p:calendar id="dataRelato"
                            required="true"
                            requiredMessage="Campo Obrigatório"
                            pattern="dd/MM/yyyy"
                            locale="pt_BR"
                            showOn="button"
                            value="#{artsAptasLivroOrdemController.dataRelato}"/>
                <br />
                <br />

                <b>
                    <h:outputLabel for="etapaObra" value="Etapa da Obra: " />
                </b>
                <h:inputText id="etapaObra" value="#{artsAptasLivroOrdemController.etapa}" />
                <br />
                <br />

                <b>
                    <h:outputLabel for="inicioEtapa" value="Inicio da Etapa: " />
                </b>
                <p:calendar id="inicioEtapa"
                            required="true"
                            requiredMessage="Campo Obrigatório"
                            pattern="dd/MM/yyyy"
                            locale="pt_BR"
                            showOn="button"
                            value="#{artsAptasLivroOrdemController.dataIncioEtapa}"/>
                <br />
                <br />

                <b>
                    <h:outputLabel for="fimEtapa" value="Términio da Etapa: " />
                </b>
                <p:calendar id="fimEtapa"
                            required="true"
                            requiredMessage="Campo Obrigatório"
                            pattern="dd/MM/yyyy"
                            locale="pt_BR"
                            showOn="button"
                            value="#{artsAptasLivroOrdemController.dataTerminioEtapa}"/>
                <br />
                <br />

                <b>
                    <h:outputLabel value="Descrição: " />
                </b>
                <h:inputText id="numeroArt" value="#{artsAptasLivroOrdemController.descricao}" />
                <br />
                <br />

                <p:commandButton value="Adicionar Relato"                                   
                                 oncomplete="dialogRelato.hide();"
                                 update="#{artsAptasLivroOrdemController.componentes}">

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

                </p:commandButton>

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

            </h:form>

        </p:dialog>
        </h:form>
</ui:define>

    
asked by anonymous 26.11.2018 / 16:39

1 answer

0

Work and a legacy system that 99% of the screens are request scoped and whenever I need to share information between two views, I do the following:

View 1

    //Seta seu atributo na view 1 através de um método, etc...
    HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    session.setAttribute("meuAtributo", new Object());

View 2

    //No construtor do MB da view 2, recupero o atributo
    HttpSession session = (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    Object obj = session.getAttribute("meuAtributo");
    //depois de usar é bom remover o atributo da session
    session.removeAttribute("meuAtributo");
    
30.11.2018 / 15:21