Finalmente parece que o pessoal de TI do DF resolveu se movimentar. Ontem teve uma assembleia com os profissionais, sem a presenca do sindicato (apesar que tinha olheiros deles la) e foi definido que para a negociacao desse ano o SINDPD-DF nao nos representa mais! Foi montado a COMISSAO DE NEGOCIACAO, que sera a responsavel por negociar direto com o SINDSEI, sem a presenca do SINDPD. Tinha cerca de 250/300 pessoas no local. Foi colhido assinatura de todos pra apresentar hoje na Delegacia do trabalho e Ministerio Publico.Foi decidido manter os 7% de reajuste de salario, o cancelamento do repasse de 1% da folha de pagamento pra EFTI e o repasse desses 1% no ticket alimentacao.Acredito que este e um dos passos mais importantes nas conquistas de melhorias profissionais para a categoria. Abaixo segue algumas fotos da assembleia de ontem. Tutorial de como criar um arquivo de texto e fazer o download no navegador com JSF.Vou criar um arquivo do tipo csv. Apos ser criado o arquivo sera feito o download do mesmo.Aqui preparo o arquivo o caminho (path), informo o tipo de arquivo (mais opcoes de tipo de arquivo aqui), crio o arquivo e mando pra download.Observe que o nome do arquivo e arquivo_ + a data de hoje.O tipo de arquivo e texto (text/plain).O metodo exportaCSV()public void exportaCSV() throws DaoException { FacesContext ctx = FacesContext.getCurrentInstance(); String file = Utils.pathArquivo("arquivo_" + new SimpleDateFormat("dd-MM-yyyy").format(new Date()) + ".csv"); String mimeType = "text/plain"; createFile(); Utils.downloadFile(mimeType, ctx, file);}O metodo pathArquivo da classe Utils. Pega o path real da aplicacaopublic static String pathArquivo(String fileName) { FacesContext ctx = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest) ctx .getExternalContext().getRequest(); //Observe que o arquivo index.html esta na raiz da aplicacao. Pego o diretorio a partir dele String caminho = request.getRealPath("/index.html"); int index = caminho.lastIndexOf("/"); caminho = caminho.substring(0, ++index); return caminho + fileName;} Criando o arquivo...private void createFile() throws DaoException { List<Terminal> lista = new TerminalService().getListaDeTodosTerminais(); //preencho a lista com uma consulta do banco de dados //verifico se o arquivo existe. Se sim apago e crio um novo. try { boolean exists = (new File(file)).exists(); if (exists) { (new File(file)).delete(); } File f = new File(file); boolean success = f.createNewFile(); if (success) { copyToFile(lista); } else { throw new DaoException("Erro ao tentar criar o arquivo!"); } } catch (IOException e) { }}Preenchendo o arquivo private void copyToFile(List lista) { try { BufferedWriter out = new BufferedWriter(new FileWriter(file, true)); //colunas (1.a linha) out.write("\"prefixo\";\"ddd\";\"numero\"\n"); for (int i=0; i<lista.size(); i++) { Object[] o = (Object[]) lista.get(i); //linhas out.write("\""+ o[0] +"\";\""+o[1]+"\";\""+o[2]+"\"\n"); } out.close(); } catch (IOException e) { }}O metodo downloadFile, que e quem vai fazer o download do arquivopublic static void downloadFile(String mimeType, FacesContext ctx, String file) { ExternalContext ectx = ctx.getExternalContext(); File f = new File(file); HttpServletResponse resp = (HttpServletResponse) ectx.getResponse(); resp.setHeader("Content-Disposition", "attachment;filename=" + file + ""); resp.setContentLength((int) f.length()); resp.setContentType(mimeType); try { FileInputStream in = new FileInputStream(f); OutputStream out = resp.getOutputStream(); byte[] buf = new byte[(int) f.length()]; int count; while ((count = in.read(buf)) >= 0) { out.write(buf, 0, count); } in.close(); out.flush(); out.close(); ctx.responseComplete(); } catch (IOException ioe) { System.err.println(ioe.getMessage()); }}Simples assim! Um jeitinho