Duvida Geração de mensagem de confirmação JavaScript
6 respostas
F
fabio_lpontes
Boa Noite Pessoal, eu estou desenvolvendo uma tela onde eu tenho um botão que gera um arquivo.
Quando eu clico nesse botão, ele verifica se existe informação nula e caso exista, não gero o arquivo.
Eu gostaria de fazer via java script ou de alguma outra forma , que quando encontrar informacoes nulas o sistema pergunte se desejo gerar assim mesmo, ecaso a resposta seja afirmativa, continue o fluxo e gere o arquivo.
Alguem tem alguma ideia ?
Segue como esta meu button e como eu estou controlando a geração do arquivo atualmente :
publicvoidgerarDoc(){finalStringBufferbuffer=newStringBuffer();FacesMessagemsg=newFacesMessage(FacesMessage.SEVERITY_WARN,"SGD","Informações Nulas");booleanloggedIn=false;booleantagsNulas=false;if(idTemplate!=null&&idTemplate!=0){loggedIn=true;}for(InformacoesFaltantesfaltantes:listaTagsTemplate){loggedIn=true;if(faltantes.getInformacaoTag()==null||faltantes.getInformacaoTag().isEmpty()){loggedIn=false;tagsNulas=true;//msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "SGD", "Informações Nulas");break;}}// Aqui eu queria perguntar para o usuario se deseja gerar mesmo com informaçoes nulas/* if (tagsNulas){ // if (confirmação do usuario for positiva){ loggedIn = true; } }*/if(loggedIn){Gravar();msg=newFacesMessage(FacesMessage.SEVERITY_INFO,"Documento Gerado",null);}FacesContext.getCurrentInstance().addMessage(null,msg);}
Fmz ateh dá para para usar o confirmDialog, mas como eu faço para esse confirm dialog aparecer apenas quando não encontrar informação ?
a ideia eh o botão “gerar” validar se tem informação nula … se tiver, abrir esse dialog perguntando se deseja gerar assim mesmo …
Eu to empacado para condicionar a abertura desse dialog …
E
evefuji
vc coloca um rendered nele de acordo com sua lógica, e coloca ele dentro de um objeto primefaces (por exemplo, p:outputPanel). Quando clicar no botão que vai verificar se existe ou não, você dá um update no pai desse p:confirmDialog.
F
fabio_lpontes
Mas como eu vou chamar o confirmation ? por mais que eu condicione ele em um rendered, eu preciso de um evento para dar show no dialog … eu tava pensando em asar java script … , mas ta dando um erro … alguem sabe onde eu to errando ? (segue o codigo e o erro que ta dando)
xhtml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><ui:compositionxmlns="http://www.w3.org/1999/xhtml"xmlns:h="http://java.sun.com/jsf/html"xmlns:f="http://java.sun.com/jsf/core"xmlns:ui="http://java.sun.com/jsf/facelets"xmlns:p="http://primefaces.org/ui"template="template.xhtml"><ui:definename="conteudo"><ui:includesrc="/html/pages/dialog/usuarios.xhtml"/><h:formid="formGerarDoc"><p:panelid="geradocDLG"widgetVar="dialoggeradoc"><f:facetname="header"><h:outputTextvalue="Gerar Documento"style="font-size: 14px"/></f:facet><tableid="display"cellpadding="4"style="margin:0 auto;"width="90%"><tr><td><h:outputTextvalue="Template:"/><p:spacerwidth="70"height="10"/><h:selectOneMenueffect="fade"id="selecttempate"label="template"style="size: 10px"value="#{gerarDocumentoController.idTemplate}"><f:selectItemitemLabel="Selecione um Template"itemValue=""/><f:selectItemsvalue="#{gerarDocumentoController.templatesItem}"/><p:ajaxlistener="#{gerarDocumentoController.changeTemplate}"update="idtagsFaltantesDT"/></h:selectOneMenu></td><td><h:outputTextvalue="Informações:"/><p:spacerwidth="46"height="10"/><h:selectOneMenueffect="fade"id="informacao"label="template"style="size: 10px"value="#{gerarDocumentoController.idInformacao}"><f:selectItemitemLabel="Selecione uma Informação"itemValue=""/><f:selectItemsvalue="#{gerarDocumentoController.informacoesItem}"/><p:ajaxlistener="#{gerarDocumentoController.changeInformacao}"/></h:selectOneMenu><p:spacerwidth="10"height="10"/><p:commandButtonimage="ui-icon-plusthick"value="Adicionar"update="idinformacoesDG,idtagsFaltantesDT"style="font-size: 12px"actionListener="#{gerarDocumentoController.addInformacao}"immediate="true"/></td></tr><tr><tdcolspan="2"><p:dataGridid="idinformacoesDG"var="informacoesDG"value="#{gerarDocumentoController.listaInformacoes}"columns="2"rows="4"paginator="true"effect="true"paginatorPosition="bottom"paginatorTemplate="{PreviousPageLink} {CurrentPageReport} {NextPageLink}"><p:column><p:panelid="gpnl"style="text-align:center; font-size:10px;width: 300px"><h:outputTextvalue="#{informacoesDG.nome}"/><divclass="pesquisa"><p:commandButtononcomplete="confirmationRemovetemplate.show()"image="ui-icon ui-icon-close"title="Remover Informação"style="width: 20px;height:20px;"immediate="true"><f:setPropertyActionListenervalue="#{informacoesDG}"target="#{gerarDocumentoController.selectedInformacoes}"/><p:ajaxlistener="#{gerarDocumentoController.changeValue}"update="idtagsFaltantesDT"/></p:commandButton></div></p:panel></p:column></p:dataGrid></td></tr><tr><tdcolspan="2"><p:dataTablevar="tagsFaltantesDT"value="#{gerarDocumentoController.listaTagsTemplate}"id="idtagsFaltantesDT"rows="4"paginator="true"effect="true"paginatorPosition="bottom"paginatorTemplate="{PreviousPageLink} {CurrentPageReport} {NextPageLink}"emptyMessage="Nenhuma Tag encontrada"><p:columnheaderText="Tags"style="width:300px"><p:cellEditor><f:facetname="output"><h:outputTextvalue="#{tagsFaltantesDT.nomeTag}"/></f:facet><f:facetname="input"><h:outputTextvalue="#{tagsFaltantesDT.nomeTag}"/></f:facet></p:cellEditor></p:column><p:columnheaderText="Informaçoes"style="width:300px"><p:cellEditor><f:facetname="output"><h:outputTextvalue="#{tagsFaltantesDT.informacaoTag}"/></f:facet><f:facetname="input"><p:inputTextvalue="#{tagsFaltantesDT.informacaoTag}"style="width:100%"label="informacaoTag"maxlength="1200"><p:ajaxlistener="#{gerarDocumentoController.changeValue}"/></p:inputText></f:facet></p:cellEditor></p:column><p:columnstyle="width:10px"><p:rowEditor/></p:column></p:dataTable></td></tr><tr><td><p:outputPanelautoUpdate="true">
[b] <p:commandButtonvalue="Gerar"update="msggerardocs"actionListener="#{gerarDocumentoController.gerarDoc}"image="ui-icon ui-icon-check"oncomplete="handlegerardocRequest(xhr, status, args)"style="font-size: 12px"immediate="true"><p:ajaxlistener="#{gerarDocumentoController.changeValue}"update="msggerardocs"/>[/b]
</p:commandButton><p:commandButtonvalue="Cancelar"type="button"image="ui-icon ui-icon-close"style="font-size: 12px"onclick="dialoggeradoc.hide()"/></p:outputPanel></td><td><p:outputPanelautoUpdate="true"><divstyle="font-size: 12px; text-align: center"><p:messagesid="msggerardocs"showDetail="true"autoUpdate="true"showSummary="false"/></div></p:outputPanel></td></tr></table></p:panel><!-- =======Dialog Remoção============================================================= --><p:confirmDialogmessage="Confirma Remoção?"showEffect="explode"hideEffect="explode"header="SGD"severity="alert"widgetVar="confirmationRemovetemplate"><p:commandButtonvalue="Sim"update="idinformacoesDG,idtagsFaltantesDT"actionListener="#{gerarDocumentoController.commandremoveinf}"oncomplete="confirmationRemovetemplate.hide()"immediate="true"/><p:commandButtonvalue="Não"onclick="confirmationRemovetemplate.hide()"type="button"/></p:confirmDialog><!-- ============================================================================== --><!-- =======Dialog Gerar Documento================================================= --><p:confirmDialogmessage="Existe informações nulas. Deseja gerar assim mesmo?"header="SGD"severity="alert"widgetVar="confirmationGerardoc"><p:commandButtonvalue="Gerar"update="msggerardocs"oncomplete="confirmationRemovetemplate.hide()"actionListener="#{gerarDocumentoController.gerarDocConfirmado}"/><p:commandButtonvalue="Não Gerar"onclick="confirmationRemovetemplate.hide()"type="button"/></p:confirmDialog><!-- ============================================================================== --></h:form><scripttype="text/javascript">functionhandlegerardocRequest(xhr,status,args){if(args.validationFailed||!args.loggedIn){//jQuery('#dialog').effect("shake", { times:3 }, 100);// aqui teria que chamar meu confirmation para continuar a geração do arquivoconfirmationGerardoc.show();}else{alert('Sucesso');//Aqui nao precisa de nada porque o medodo ja gerou o documento}}</script></ui:define></ui:composition>
classe que gera documento
packagebr.com.dsc.controller;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;importjavax.faces.application.FacesMessage;importjavax.faces.context.ExternalContext;importjavax.faces.context.FacesContext;importjavax.faces.event.ActionEvent;importjavax.faces.model.SelectItem;importjavax.servlet.ServletContext;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.primefaces.context.RequestContext;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.stereotype.Controller;importbr.com.dsc.entity.*;@Controller@Qualifier("gerarDocumentoController")publicclassGerarDocumentoController{privatefinalLoglogger=LogFactory.getLog(getClass());@AutowiredprivateIUsuarioServiceiUsuarioService;@AutowiredprivateITemplatesServiceiTemplatesService;@AutowiredprivateIInformacaoServiceiInformacaoService;@AutowiredprivateIParagrafosServiceiParagrafosService;@AutowiredprivateITagsServiceiTagsService;// Variaveis de controleprivateBooleanopenTela;privateTemplatesselectedTemplates;privateList<Informacoes>listaInformacoes;privateInformacoesselectedInformacoes;privateIntegeridTemplate;privateIntegeridInformacao;privateList<InformacoesFaltantes>listaTagsTemplate=newArrayList<InformacoesFaltantes>();privateUsuariosusuariosCorrente=newUsuarios();privateStringpath2;publicGerarDocumentoController(){setSelectedTemplates(newTemplates());setListaInformacoes(newArrayList<Informacoes>());setSelectedInformacoes(newInformacoes());}/* ==================Funcionalidades Omitidas================================== */publicvoidgerarDoc(ActionEventactionEvent){RequestContextcontext=RequestContext.getCurrentInstance();FacesMessagemsg=null;booleanloggedIn=false;if(idTemplate!=null&&idTemplate!=0){//loggedIn = true;for(InformacoesFaltantesfaltantes:listaTagsTemplate){loggedIn=true;if(faltantes.getInformacaoTag()==null||faltantes.getInformacaoTag().isEmpty()){loggedIn=false;msg=newFacesMessage(FacesMessage.SEVERITY_WARN,"SGD","Informações Nulas");break;}}if(loggedIn){gerarDocConfirmado();msg=newFacesMessage(FacesMessage.SEVERITY_INFO,"Documento Gerado",null);}}else{msg=newFacesMessage(FacesMessage.SEVERITY_WARN,"SGD","Nenhum Template Selecionado");}FacesContext.getCurrentInstance().addMessage(null,msg);context.addCallbackParam("loggedIn",loggedIn);}publicvoidgerarDocConfirmado(){finalStringBufferbuffer=newStringBuffer();//FacesMessage msg = null;//boolean loggedIn = false;if(selectedTemplates.getParagrafosTemplates()!=null&&!selectedTemplates.getParagrafosTemplates().isEmpty()){Collections.sort(selectedTemplates.getParagrafosTemplates(),newComparator<ParagrafosTemplate>(){publicintcompare(ParagrafosTemplateo1,ParagrafosTemplateo2){returno1.getSequencia()<o2.getSequencia()?-1:(o1.getSequencia()>o2.getSequencia()?+1:0);}});}// Aqui fica meu metodofor(ParagrafosTemplateparagrafosTemplate:selectedTemplates.getParagrafosTemplates()){if(paragrafosTemplate.getNumeracao()!=null&&!paragrafosTemplate.getNumeracao().isEmpty()){buffer.append(paragrafosTemplate.getNumeracao().trim()).append(" ");}if(paragrafosTemplate.getParagrafos().getTitulo()!=null&&!paragrafosTemplate.getParagrafos().getTitulo().isEmpty()){buffer.append(paragrafosTemplate.getParagrafos().getTitulo().trim()).append("\n");}if(paragrafosTemplate.getParagrafos().getCorpo()!=null&&!paragrafosTemplate.getParagrafos().getCorpo().isEmpty()){buffer.append(paragrafosTemplate.getParagrafos().getCorpo()).append("\n");}}Stringtexto=buffer.toString();for(InformacoesFaltantesfaltantes:listaTagsTemplate){texto=texto.replace("#"+faltantes.getNomeTag()+"#",faltantes.getInformacaoTag());}System.out.println(texto);// fim do metodozerarController();Gravar(texto);//msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"Documento Gerado", null);//FacesContext.getCurrentInstance().addMessage(null,msg);}publicvoidGravar(Stringtexto){/* String conteudo = texto; String path = null;*/Stringlocal=((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("/")+"arquivos";Filediretorio=newFile(local);if(!diretorio.exists()){diretorio.mkdirs();}System.out.println("diretorio: "+diretorio);try{// o true significa q o arquivo será constanteStringfilename="newDoc"+getUsuariosCorrente().getId()+".rtf";Filearquivo=newFile(diretorio,filename);FileOutputStreamfos=newFileOutputStream(arquivo);fos.write(texto.getBytes());fos.close();FacesContextfacesContext=FacesContext.getCurrentInstance();ExternalContextcontext=facesContext.getExternalContext();Filefile=newFile(arquivo.getAbsolutePath());HttpServletResponseresponse=(HttpServletResponse)context.getResponse();response.setHeader("Content-Disposition","attachment;filename=\""+filename+"\"");// headerresponse.setContentLength((int)file.length());// O tamanho do// arquivoresponse.setContentType("rtf");// e o tipoFileInputStreamin=newFileInputStream(file);OutputStreamout=response.getOutputStream();byte[]buf=newbyte[(int)file.length()];intcount;while((count=in.read(buf))>=0){out.write(buf,0,count);}in.close();out.flush();out.close();facesContext.responseComplete();file.delete();}catch(IOExceptionex){//System.out.println("Não foi possÃvel salvar o arquivo Erro");System.out.println("Nao foi possivel salvar o arquivo Erro");ex.printStackTrace();}//return path;}/* =====================Gets e Sets==================================== */}
esse erro ta ocorrendo porque o comando “RequestContext context = RequestContext.getCurrentInstance();” ta retornando null … Se eu trocar o botão para ajax true, esse comando retorna valor, contudo não gera documento …