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!!!