Quantcast
Channel: GUJ - Tópicos com a tag primefaces
Viewing all articles
Browse latest Browse all 578

Controlar targets diferentes (abas diferentes) no mesmo botão

$
0
0

@rafaelmaps escreveu:

Olá a todos, tenho uma aplicação onde uso jsf + primefaces e devo desenvolver a seguinte funcionalidade:

Desejo gerar um relatório via jasper+iReport que deve ser exibido em uma nova guia do navegador, permitindo assim que o usuário possa continuar a utilizar o sistema na aba anterior.

Acontece que esse relatório é na verdade uma planilha que será impressa e preenchida pelo usuário (na verdade a planilha é encaminhada pra fazenda e lá é preenchida), depois de preenchida o usuário irá lançar os valores preenchidos no sistema. No momento da impressão a planilha fica salva no sistema com status "ABERTA" e depois que ela volta preenchida e é lançada no sistema tem seus status definido para "FECHADA". A regra é: eu só posso gerar uma nova planilha se a anterior estiver como "FECHADA".

O problema é, eu já consigo verificar o status da planilha só que eu preciso mostrar uma mensagem ao usuário informando que existe uma planilha aberta e por isso não será possível a emissão de uma nova.

Meu problema está justamente em como exibir tal mensagem, gostaria que caso a verificação do status da planilha fosse false o navegador não abrisse uma segunda aba, mas sim renderizasse na primeira aba a mensagem de erro.

Tentei de duas maneiras mas o navegador sempre abre a segunda aba. Na primeira tentativa, o navegador abre a segunda aba com o conteúdo igual a da primeira aba (formulário preenchido) com a mensagem exibida. Na segunda tentativa, o navegador abriu a segunda aba com uma planilha totalmente em branco mas na primeira aba não apareceu a mensagem de erro.

O resultado da primeira tentativa é aceitável se a aba onde a mensagem não aparece fosse fechada(não sei se corro o risco de perder informações aqui), já o resultado da segunda tentativa é até aceitável desde que na primeira aba do navegador apareça a mensagem. Porém, o ideal era caso a verificação do status falhasse o navegador não abriria outra aba e mostraria a mensagem de erro na aba atual.... de que maneira podemos chegar a uma solução ? javascript?! JQuery ?!

tentei com action e actionListener no botão mas não resolveu.. no momento minha página possui o atributo onclick="this.form.target = '_blank'" no botão.

Pra ficar mais claro deixo o código referente a minha página aqui:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:c="http://java.sun.com/jsp/jstl/core"
                xmlns:p="http://primefaces.org/ui" template="../main.xhtml">

    <ui:define name="content">
        <style type="text/css">
            .column1{width: 300px;height:auto}
            .column2{width: 600px;height:auto}
        </style>
        <div style="width: fit-content;">
            <h:form id="fmEmissaoInsp">
                <p:focus />
                <p:growl id="growl"/>
                <p:messages id="messages"/>
                <div style="margin: 0 auto; width: fit-content;">
                    <h2>Emissão de Planilha de Inspeção</h2>
                </div>
                <p:panelGrid columns="2" columnClasses="column1, column2" styleClass="ui-panelgrid-grid">
                    <p:outputLabel value="Propriedade:" for="prop"/>
                    <p:selectOneMenu id="prop" value="#{emissaoPlanilhaInspecao.propriedade}" converter="propriedadeConverter"
                                     required="#{param['fmEmissaoInsp:btnConfirm']==false}" filterMatchMode="contains" filter="true">
                        <f:selectItem itemLabel="Selecione"/>
                        <f:selectItems value="#{emissaoPlanilhaInspecao.listaPropriedades}" var="p" itemValue="#{p}" itemLabel="#{p.nome}" />
                        <p:ajax update="talhao" event="change" listener="#{emissaoPlanilhaInspecao.getTalhoesList}" />
                    </p:selectOneMenu>

                    <p:outputLabel value="Talhão:" for="talhao"/>
                    <p:selectOneMenu id="talhao" value="#{emissaoPlanilhaInspecao.talhao}" converter="talhaoConverter"
                                     required="#{param['fmEmissaoInsp:btnConfirm']==false}" filterMatchMode="contains" filter="true">
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{emissaoPlanilhaInspecao.listaTalhoes}" var="t" itemValue="#{t}" itemLabel="#{t.cod_talhao}"/>
                    </p:selectOneMenu>

                    <p:outputLabel value="% a visar:" for="porcAvisar"/>
                    <p:inputText id="porcAvisar" value="#{emissaoPlanilhaInspecao.inspecao.porcentagemAvisar}" style="width: 21%;"
                                 required="#{param['fmEmissaoInsp:btnConfirm']==false}"/>
                </p:panelGrid>
                <div style="margin: 0 auto; width: fit-content;">
                    <p:commandButton id="btnConfirm" class="btn btn-success btn-md" value="Emitir" icon="fa fa-file-pdf-o" onclick="this.form.target = '_blank'" 
                                     action="#{emissaoPlanilhaInspecao.salvarAndEmitir()}" ajax="false" update=":fmInspecao"/>
                </div>
            </h:form>
        </div>
    </ui:define>
</ui:composition>

Agradeceria muito se puderem ajudar, pois o prazo de entrega está chegando ao fim e a diretoria está me apertando ^^

Valeu!!!

Mensagens: 1

Participantes: 1

Ler tópico completo


Viewing all articles
Browse latest Browse all 578