logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Ago 3

TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (11)

Escrito por Janderson Cardoso em #JAVA + FLEX NA PRÀTICA, Dica, Frameworks, html, Java, relatório, Ria’s Geral @ 08 3rd, 2010 | via http://www.jandersonfc.com/ | Sem comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »


 TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (11)

TIPO DE SAÍDAS DE RELATÓRIOS COM IREPORT

No último post deste tutorial fiz um screencast explicando um modo de criar relatórios usando ireport + java + flex. Nesse exemplo usei nossas próprias entidades para criar os relatórios assim evitando até em nossos relatórios a necessidade de usar instruções sql. Para quem não assistiu vale a pena conferir (TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (10).{obrigado a todos que assitiram esse screencast, até o momento já obtive + de 1100 visualizações ;) }

Obs.: Esse post mesmo que sendo continuação de um tutorial pode ser analisado e aproveitado sem a necessidade de acompahar todo o tutorial e também sem a necessidade de ter conhecimento de Flex. Então bom proveito para todos ;)

o assunto de hoje é uma continuação sobre relatórios com ireport, como muitas pessoas me pediram por email e até via comentário no blog onde eu cometi o desrespeito de não responder :( venho através deste post colocar uma listagem de tipo de saídas que podemos ter para os nosso relatórios, tudo com pouco ou nada de esforço, só pelo fato de ter escolhida a ferramenta certa para a situação certa. Assim como tem a saída pdf no nosso projeto poderemos ter essas listadas abaixos(só listei as que normalmente são utilizadas).

vamos nos basear no ServletReport que foi feito no tutorial. Para te ajudar está logo abaixo:

PLAIN TEXT
JAVA:

  1. public class ServletReport extends HttpServlet {
  2.  
  3.   private ServletContext sc;
  4.  
  5.   private FactoryService factoryService = new FactoryService();
  6.  
  7.   public void init(ServletConfig config) throws ServletException {
  8.     super.init(config);
  9.  
  10.     sc = config.getServletContext();
  11.  
  12.     WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(sc);
  13.  
  14.     AutowireCapableBeanFactory autowireCapableBeanFactory = webApplicationContext
  15.            .getAutowireCapableBeanFactory();
  16.  
  17.     autowireCapableBeanFactory.configureBean(factoryService,“FactoryService”);
  18.  
  19.   }
  20.  
  21.   @SuppressWarnings(“unchecked”)
  22.   protected void service(HttpServletRequest request,
  23.     HttpServletResponse response) throws ServletException, IOException {
  24.  
  25.     List<?> dados = new ArrayList();
  26.     File reportFile = null;
  27.     HashMap parameters = new HashMap();
  28.  
  29.     String acao = request.getParameter(“acao”);
  30.     String where = request.getParameter(“where”);
  31.  
  32.     if (acao.equals(“estado”)) {
  33.         dados = factoryService.estadoService.filterReport(where);
  34.         reportFile = new File(sc.getRealPath(“WEB-INF/reports/relatorioEstado.jasper”));
  35.     }
  36.  
  37.     byte[] bytes = null;
  38.  
  39.     JRDataSource jrds = new
  40.     JRBeanCollectionDataSource(dados);
  41.  
  42.     try {
  43.       bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),parameters, jrds);
  44.     } catch (JRException e) { 
  45.       e.printStackTrace();
  46.     }
  47.  
  48.     if (bytes != null && bytes.length> 0) {
  49.       response.setContentType(“application/pdf”);
  50.       response.setContentLength(bytes.length);
  51.       ServletOutputStream ouputStream = response.getOutputStream();
  52.       ouputStream.write(bytes, 0, bytes.length);
  53.       ouputStream.flush();
  54.       ouputStream.close();
  55.     }
  56.   }
  57. }

no servlet acima temos o exemplo de um relatório saindo em um pdf, agora do try catch para baixo podemos mudar nosso tipo de saída, vamos a listagem abaixo:

XLS – Excel

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);
  4.   JExcelApiExporter xlsExporter = new JExcelApiExporter();
  5.   ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();
  6.   xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  7.   xlsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,xlsReport);
  8.   xlsExporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.TRUE);
  9.   xlsExporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
  10.  
  11.   xlsExporter.exportReport();
  12.   bytes = xlsReport.toByteArray();
  13.  
  14.   if (bytes != null && bytes.length> 0) {
  15.     response.setContentType(“application/vnd.ms-excel”);
  16.     response.setContentLength(bytes.length);
  17.     xlsReport.close();
  18.     ServletOutputStream ouputStream = response.getOutputStream();
  19.     ouputStream.write(bytes, 0, bytes.length);
  20.     ouputStream.flush();
  21.     ouputStream.close();
  22.   }
  23. } catch (Exception e) {
  24.   e.printStackTrace();
  25.   return;
  26. }

RTF

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);
  4.  
  5.   JRRtfExporter rtfExporter = new JRRtfExporter();
  6.   ByteArrayOutputStream rtfByte = new ByteArrayOutputStream();
  7.   rtfExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  8.   rtfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,rtfByte);
  9.  
  10.   rtfExporter.exportReport();
  11.   bytes = rtfByte.toByteArray();
  12.  
  13.   if (bytes != null && bytes.length> 0) {
  14.     response.setContentType(“application/rtf”);
  15.     response.setContentLength(bytes.length);
  16.     rtfByte.close();
  17.     ServletOutputStream ouputStream = response.getOutputStream();
  18.     ouputStream.write(bytes, 0, bytes.length);
  19.     ouputStream.flush();
  20.     ouputStream.close();
  21.   }
  22. } catch (Exception e) {
  23.   e.printStackTrace();
  24.   return;
  25. }

HTML

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile, parameters, jrds);
  4.  
  5.   JRHtmlExporter htmlExporter = new JRHtmlExporter();
  6.   ByteArrayOutputStream htmlByte = new ByteArrayOutputStream();
  7.   htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  8.   htmlExporter.setParameter(
  9.   JRExporterParameter.OUTPUT_STREAM, htmlByte);
  10.   htmlExporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,false);
  11.  
  12.   htmlExporter.exportReport();
  13.   bytes = htmlByte.toByteArray();
  14.  
  15.   if (bytes != null && bytes.length> 0) {
  16.     response.setContentType(“text/html;charset=UTF-8″);
  17.     response.setContentLength(bytes.length);
  18.     htmlByte.close();
  19.     ServletOutputStream ouputStream = response.getOutputStream();
  20.     ouputStream.write(bytes, 0, bytes.length);
  21.     ouputStream.flush();
  22.     ouputStream.close();
  23.   }
  24. } catch (Exception e) {
  25.   e.printStackTrace();
  26.   return;
  27. }

CSV

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);
  4.  
  5.   JRCsvExporter csvExporter = new JRCsvExporter();
  6.   ByteArrayOutputStream csvByte = new ByteArrayOutputStream();
  7.   csvExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  8.   csvExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,csvByte);
  9.  
  10.   csvExporter.exportReport();
  11.   bytes = csvByte.toByteArray();
  12.  
  13.   if (bytes != null && bytes.length> 0) {
  14.     response.setContentType(“application/csv”);
  15.     response.setContentLength(bytes.length);
  16.     csvByte.close();
  17.     ServletOutputStream ouputStream = response.getOutputStream();
  18.     ouputStream.write(bytes, 0, bytes.length);
  19.     ouputStream.flush();
  20.     ouputStream.close();
  21.   }
  22. } catch (Exception e) {
  23.   e.printStackTrace();
  24.   return;
  25. }

TXT

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);
  4.  
  5.   JRTxtExporter txtExporter = new JRTxtExporter();
  6.   ByteArrayOutputStream txtByte = new ByteArrayOutputStream();
  7.   txtExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  8.   txtExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,txtByte);
  9.  
  10.   txtExporter.exportReport();
  11.   bytes = txtByte.toByteArray();
  12.  
  13.   if (bytes != null && bytes.length> 0) {
  14.     response.setContentType(“application/txt”);
  15.     response.setContentLength(bytes.length);
  16.     txtByte.close();
  17.     ServletOutputStream ouputStream = response.getOutputStream();
  18.     ouputStream.write(bytes, 0, bytes.length);
  19.     ouputStream.flush();
  20.     ouputStream.close();
  21.   }
  22. } catch (Exception e) {
  23.   e.printStackTrace();
  24.   return;
  25. }

DOC – Word

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);
  4.  
  5.   JRRtfExporter docExporter = new JRRtfExporter();
  6.   ByteArrayOutputStream docByte = new ByteArrayOutputStream();
  7.   docExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  8.   docExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,docByte);
  9.  
  10.   docExporter.exportReport();
  11.   bytes = docByte.toByteArray();
  12.  
  13.   if (bytes != null && bytes.length> 0) {
  14.     response.setContentType(“application/msword”);
  15.     response.setContentLength(bytes.length);
  16.     docByte.close();
  17.     ServletOutputStream ouputStream = response.getOutputStream();
  18.     ouputStream.write(bytes, 0, bytes.length);
  19.     ouputStream.flush();
  20.     ouputStream.close();
  21.   }
  22. } catch (Exception e) {
  23.   e.printStackTrace();
  24.   return;
  25. }

ODT – OpenOffice(brOffice) Word

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);
  4.  
  5.   JROdtExporter odtExporter = new JROdtExporter();
  6.   ByteArrayOutputStream odtByte = new ByteArrayOutputStream();
  7.   odtExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  8.   odtExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,odtByte);
  9.  
  10.   odtExporter.exportReport();
  11.   bytes = odtByte.toByteArray();
  12.  
  13.   if (bytes != null && bytes.length> 0) {
  14.     response.setContentType(“application/vnd.oasis.opendocument.text”);
  15.     response.setContentLength(bytes.length);
  16.     odtByte.close();
  17.     ServletOutputStream ouputStream = response
  18.     .getOutputStream();
  19.     ouputStream.write(bytes, 0, bytes.length);
  20.     ouputStream.flush();
  21.     ouputStream.close();
  22.   }
  23. } catch (Exception e) {
  24.   e.printStackTrace();
  25.   return;
  26. }

ODS – OpenOffice(brOffice) Planilha tipo Excel (SpreadSheet)

PLAIN TEXT
JAVA:

  1. try {
  2.  
  3.   JasperPrint jasperPrint = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);
  4.  
  5.   JROdsExporter odsExporter = new JROdsExporter();
  6.   ByteArrayOutputStream odsByte = new ByteArrayOutputStream();
  7.   odsExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
  8.   odsExporter.setParameter(JRExporterParameter.OUTPUT_STREAM,odsByte);
  9.  
  10.   odsExporter.exportReport();
  11.   bytes = odsByte.toByteArray();
  12.  
  13.   if (bytes != null && bytes.length> 0) {
  14.     response.setContentType(“application/vnd.oasis.opendocument.spreadsheet”);
  15.     response.setContentLength(bytes.length);
  16.     odsByte.close();
  17.     ServletOutputStream ouputStream = response.getOutputStream();
  18.     ouputStream.write(bytes, 0, bytes.length);
  19.     ouputStream.flush();
  20.     ouputStream.close();
  21.   }
  22. } catch (Exception e) {
  23.   e.printStackTrace();
  24.   return;
  25. }

bem, aí está uma lista bem completa com 9 tipos de saídas(contando com o pdf) para seus relatórios que tenho certeza que vai ser útil!

Cumps. e até a próxima ;)

Similar Posts:

  • TUTORIAL JAVA + FLEX NA PRÁTICA (8) – Datas
  • Pegar Código Fonte de Sites Remotos
  • TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus
  • TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (10)

 TUTORIAL JAVA + FLEX + IREPORT NA PRÁTICA (11)

Jan 26

TUTORIAL JAVA + FLEX NA PRÁTICA (9) – Atualizando o Swiz

Escrito por Janderson Cardoso em #JAVA + FLEX NA PRÀTICA, Action Script 3.0, Adobe Flex, código fonte Flex, Código Fonte java, Dicas, mvc, pratica java flex, Ria’s Geral, Swiz Framework, TUTORIAL FLEX, TUTORIAL JAVA @ 01 26th, 2010 | via http://www.jandersonfc.com/ | 3 comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

 TUTORIAL JAVA + FLEX NA PRÁTICA (9)   Atualizando o Swiz

Outra dúvida muito solicitada por email pela galera é a respeito da atualização do swiz, quando atualiza o framework logo de kara dá erro,confesso que esse tempo todo não trabalhei com projetos usando o swiz, só quando fiz esse Tutorial, e também por falta de tempo, não atualizei o framework, mas esse final de semana para minha surpresa tentei migrar e foi super tranquilo, então vou passar a dica para vocês agora.

Esse artigo é continuação do

TUTORIAL JAVA + FLEX NA PRÁTICA 1/6

TUTORIAL JAVA + FLEX NA PRÁTICA 2/6

TUTORIAL JAVA + FLEX NA PRÁTICA 3/6

TUTORIAL JAVA + FLEX NA PRÁTICA 4/6

TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

TUTORIAL JAVA + FLEX NA PRÁTICA 6/6

TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

TUTORIAL JAVA + FLEX NA PRÁTICA 8 – Datas

Caso queira o projeto java é só baixar aqui (sem as libs).

Caso queira o projeto java é só baixar aqui.(com as libs).

Caso queira o projeto flex é só baixar aqui.

ATUALIZANDO O SWIZ FRAMEWORK

Primeira coisa que vamos fazer é baixar a última versão stable e atualmente (25/01/2009) é a swiz-0.6.4-flex3.swz. Digo isso porque vi no site da swiz que existe a versão alpha 1.0 do framework, esse sim pelo que vi terá algumas novidades notável, como metadata personalizado, estou migrando para essa versão 0.6.4 e quando lançar a 1.0 atualizo vocês por aqui no blog ;) . vamos ao que interessa .

  1. se ainda não baixou baixe o swiz-0.6.4-flex3.swz.
  2. na pasta libs do nosso projeto flex (CrudFlex) retiramos a antiga lib (swiz-0.0.5-010609.swc) e adicionamos a nova 0.6.4.

depois de ter feito isso vai dar erro na nossa models.delegates, isso porque a classe AbstractDelegate foi retirada do framework do swiz, basta retirar o extends AbstractDelegate que nossa classe voltará a funcionar, se vc tentar rodar agora já vai funcionar, blz.. espero que tenha ajudado muita gente.

Tô brincando galera… já que é para atualizar vamos atualizar direito..hehe assim funciona mais não está de acordo com a documentação do Swiz.

Próximo passo nosso será criar o nosso SwizConfig, no nosso projeto na index.mxml temos um preinitialize que invocava a funcção que iniciava o Swiz, agora temos o Swiz config que substitui essa antiga configuração, então nosso index.mxml era assim:

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2. <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute”
  3.     preinitialize=“{iniciar(event)}”>
  4.    
  5.     <mx:Script>
  6.         <![CDATA[
  7.             import com.saberprogramar.views.CidadeView;
  8.             import com.saberprogramar.views.EstadoView;
  9.             import mx.managers.PopUpManager;
  10.             import org.swizframework.Swiz;     
  11.             import mx.events.FlexEvent;   
  12.            
  13.             private function iniciar(event:FlexEvent):void{    
  14.                 Swiz.setStrict(false).loadBeans( [Beans] );           
  15.             }
  16.            
  17.             private function chamarCidadeView():void{
  18.                 PopUpManager.createPopUp(this,CidadeView,false);
  19.             }
  20.            
  21.             private function chamarEstadoView():void{
  22.                 PopUpManager.createPopUp(this,EstadoView,false);
  23.             }
  24.            
  25.         ]]>
  26.     </mx:Script>
  27.     <mx:Button x=“10″ y=“22″ label=“Estado” height=“52″ width=“88″ click=“{chamarEstadoView()}”/>
  28.     <mx:Button x=“10″ y=“93″ label=“Cidade” width=“88″ height=“54″ click=“{chamarCidadeView()}”/>
  29.    
  30.    
  31. </mx:Application>

ficou agora assim:

PLAIN TEXT
XML:

  1. <?xml version=“1.0″ encoding=“utf-8″?>
  2. <mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute”
  3.     xmlns:swiz=“http://swiz.swizframework.org”>
  4.    
  5.     <mx:Script>
  6.         <![CDATA[
  7.             import mx.logging.LogEventLevel;
  8.             import com.saberprogramar.views.CidadeView;
  9.             import com.saberprogramar.views.EstadoView;
  10.             import mx.managers.PopUpManager;
  11.             import org.swizframework.Swiz;     
  12.             import mx.events.FlexEvent;   
  13.                                    
  14.             private function chamarCidadeView():void{
  15.                 PopUpManager.createPopUp(this,CidadeView,false);
  16.             }
  17.            
  18.             private function chamarEstadoView():void{
  19.                 PopUpManager.createPopUp(this,EstadoView,false);
  20.             }
  21.            
  22.         ]]>
  23.     </mx:Script>
  24.    
  25.     <swiz:SwizConfig
  26.         strict=“true”
  27.         eventPackages=“com.saberprogramar.events”
  28.         mediateBubbledEvents=“true”
  29.         viewPackages=“com.saberprogramar.views”
  30.         beanLoaders=“{[Beans]}”  
  31.         logEventLevel=“{LogEventLevel.WARN}”
  32.     />
  33.    
  34.     <mx:Button x=“10″ y=“22″ label=“Estado” height=“52″ width=“88″ click=“{chamarEstadoView()}”/>
  35.     <mx:Button x=“10″ y=“93″ label=“Cidade” width=“88″ height=“54″ click=“{chamarCidadeView()}”/>
  36.        
  37. </mx:Application>

tá, mas se funcionava antes porque vou fazer isso? explico, está vendo esse viewPackages e eventPackeges, isso é muito importante para usar uma nova Metadata do Swiz, o mediate, tinha na versão anterior mas não era interessante como agora , já que agora conseguimos passar para o nosso Mediate nosso Evento customizado, tudo isso graças a esse atributo eventPackeges. Além disso na 1.0 esse arquivo vai ser mantido pelo que vi, então você estará mais próximo para atualizar quando o mesmo for lançado.

USANDO O MEDIATE

Mas afinal o que é esse Mediate? o Mediate é uma Metadata, assim como usamos o Autowire, que serve para não precisar ficar adicionando escuta de eventos, vamos explicar na prática… vá em “views.action.CidadeAction” na função init temos duas escuta de evento

PLAIN TEXT
ACTIONSCRIPT:

  1. Swiz.addEventListener(CidadeEvent.SAVE,onSaveComplete);
  2.     Swiz.addEventListener(CidadeEvent.REMOVE,onRemoveComplete);

não precisamos fazer mais isso, pode apagar.. agora vá na função onSaveComplete e coloque o Mediate

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.SAVE”)]
  2. public function onSaveComplete(event:CidadeEvent):void{ 
  3.     stack.selectedChild = canvasDefault;
  4.     findAll();
  5. }

o mesmo no onRemoveComplete

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.REMOVE”)]
  2. public function onRemoveComplete(event:CidadeEvent):void{
  3.     stack.selectedChild = canvasDefault;
  4.     findAll();
  5. }

e como as duas funções fazem a mesma coisa podemos também utilizar de uma apenas assim:

PLAIN TEXT
ACTIONSCRIPT:

  1. [Mediate(event=“CidadeEvent.SAVE”)]
  2. [Mediate(event=“CidadeEvent.REMOVE”)]
  3. public function onSaveComplete(event:CidadeEvent):void{ 
  4.     stack.selectedChild = canvasDefault;
  5.     findAll();
  6. }

só observe que foi necessário modificar o “modificador de acesso” para public, caso contrário não funciona.

Agora sim é isso galera, o swiz está por enquanto atualizado, vi alguns exemplos na internet usando coisas que nunca vi no swiz(Documentação) por isso me retive e mostrei baseado na documentação… seguindo os passos do mesmo..(Os delegates não são mais necessários mas já que está aí resolvi manter). Espero que te ajude e estimule a manter o framework atualizado, porque esse merece seu carinho e atenção :)

Cumps.

  • Share this on del.icio.us
  • Digg this!
  • Share this on Reddit
  • Share this on Technorati
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on FriendFeed
  • Send this page to Print Friendly

Similar Posts:

  • TUTORIAL JAVA + FLEX NA PRÁTICA 3/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 4/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

 TUTORIAL JAVA + FLEX NA PRÁTICA (9)   Atualizando o Swiz

Jan 25

TUTORIAL JAVA + FLEX NA PRÁTICA (8) – Datas

Escrito por Janderson Cardoso em #JAVA + FLEX NA PRÀTICA, Action Script 3.0, Adobe Flex, código fonte Flex, Código Fonte java, Componentes, Data java flex, Dicas, pratica java flex, TUTORIAL FLEX, TUTORIAL JAVA @ 01 25th, 2010 | via http://www.jandersonfc.com/ | 2 comentários
Janderson Cardoso
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

 TUTORIAL JAVA + FLEX NA PRÁTICA (8)   Datas

“O QUE È BOM TEM QUE CONTINUAR”        “O SENTIMENTO NÂO PODE PARAR”

Ano de 2010 começa e a vontade de ajudar a comunidade java e flex aumenta, e como podem perceber reativo hoje o Tutorial mais bombado do meu blog(JAVA + FLEX NA PRÀTICA) e os Motivos para reativar esse tutorial foi:

  • Percebi que o público do meu blog é uma galera que busca um pouco além de pequenas dicas, gostaram é de tutorial.
  • É mais fácil dar continuidade neste tutorial e mostrar algumas coisas mais avançadas ou continua de que começar outra, ter que ficar explicando d+, ter que no final ficar no básico.
  • Muitas dúvidas por email que valem um novo post para explicações, atualizações e dicas.
  • Quem sabe não sai um Ebook legal aí ,hein! ;)

Então se prepara, pegue um café que no Tutorial Java + Flex Na Prática (8) – Datas você vai aprender como trabalhar com datas usando Flex e Java (já que essa é a dúvida campeão da galera por email).

Para você que ainda não leu esses artigos para facilitar lá vai

Esse artigo é continuação do

TUTORIAL JAVA + FLEX NA PRÁTICA 1/6

TUTORIAL JAVA + FLEX NA PRÁTICA 2/6

TUTORIAL JAVA + FLEX NA PRÁTICA 3/6

TUTORIAL JAVA + FLEX NA PRÁTICA 4/6

TUTORIAL JAVA + FLEX NA PRÁTICA 5/6

TUTORIAL JAVA + FLEX NA PRÁTICA 6/6

TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

Caso queira o projeto java é só baixar aqui (sem as libs).

Caso queira o projeto java é só baixar aqui.(com as libs).

Caso queira o projeto flex é só baixar aqui.

TRABALHANDO COM DATAS NO JAVA  + FLEX

Sim, parece simples mas causa uma dúvida na galera que começa com JAVA + FLEX, seja na parte java com qual anotação usar ou seja no flex como pegar os valores em DD/MM/YYYY e converter em YYYY/MM/DD (já que é nesse formato que se armazena data no banco) . Tem muita gente que esquece que é data, se estressa e trata como se fosse string, nada contra mas se quiser pode aproveitar esse artigo para trabalhar Data como Data… vamos começar :)

A primeira coisa que vamos fazer é acrescentar um novo atributo na nossa entidade Cidade, vamos acrescentar a data de fundação(lógico que isso é redículo mas é um exemplo, ok) e com sua anotação correta.Vamos adicionar o atributo na nossa entidade:

PLAIN TEXT
JAVA:

  1. @Temporal(TemporalType.DATE)
  2.  
  3. private Date dataFundacao;
  4.  
  5. public Date getDataFundacao() {
  6.  
  7. return dataFundacao;
  8.  
  9. }
  10.  
  11. public void setDataFundacao(Date dataFundacao) {
  12.  
  13. this.dataFundacao = dataFundacao;
  14.  
  15. }

simples não, apenas vale lembrar que o Date é o “java.util.Date” e não “java.sql.Date”, vamos agora pro flex que aqui acabou, perceberam como OO ajuda… mexemos em uma classe, o resto fica do jeito que está :)

No Flex adicionamos a atributo também na nossa entidade que é nosso clone da Cidade:

PLAIN TEXT
ACTIONSCRIPT:

  1. public var dataFundacao:Date;

Agora, vamos criar um componente customizado, na verdade vamos extender o componente data Padrão do Flex (o DateField) chamei de DateFieldpt, só um detalhe, achei esse componente na net e não vou dar créditos pois não sei quem fez, então dentro do nosso projeto vamos criar um package components e vamos adicionar esse nosso componente, vamos ao código:

PLAIN TEXT
ACTIONSCRIPT:

  1. package com.saberprogramar.components
  2.  
  3. {
  4.  
  5. import com.saberprogramar.utils.Util;
  6.  
  7. import mx.controls.DateField;
  8.  
  9. import mx.events.FlexEvent;
  10.  
  11. public class DateFieldpt extends DateField
  12.  
  13. {
  14.  
  15. private const diasNomes:Array = [“D”,“S”,“T”,“Q”,“Q”,“S”,“S”];
  16.  
  17. private const mesesNomes:Array = [“Janeiro”,“Fevereiro”,“Março”,“Abril”,“Maio”,“Junho”,“Julho”,“Agosto”,“Setembro”,“Outubro”,“Novembro”,“Dezembro”];
  18.  
  19. public function DateFieldpt() {
  20.  
  21. super();
  22.  
  23. this.width=95;
  24.  
  25. dayNames=diasNomes;
  26.  
  27. monthNames=mesesNomes;
  28.  
  29. formatString=“DD/MM/YYYY”;
  30.  
  31. restrict=“0-9″;
  32.  
  33. editable=true;
  34.  
  35. showToday=true;
  36.  
  37. text = Util.dateToString(new Date());
  38.  
  39. addEventListener(FlexEvent.VALUE_COMMIT,completar);
  40.  
  41. }
  42.  
  43. private function completar(event:FlexEvent):void {
  44.  
  45. var str:String = event.target.text as String;
  46.  
  47. if ( str.charAt(2) != “/” || str.charAt(5) != “/” ) {
  48.  
  49. var mask:String;
  50.  
  51. var dataAtual:Date = new Date();
  52.  
  53. if ( str.length == 2 ) {
  54.  
  55. mask = str.substr(0, 2) + “/” +
  56.  
  57. (dataAtual.getMonth()+1).toString() + “/” +
  58.  
  59. dataAtual.getFullYear();
  60.  
  61. event.target.text = mask;
  62.  
  63. }
  64.  
  65. else if ( str.length == 4 ) {
  66.  
  67. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  68.  
  69. dataAtual.getFullYear().toString();
  70.  
  71. event.target.text = mask;
  72.  
  73. }
  74.  
  75. else if ( str.length == 6 ) {
  76.  
  77. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  78.  
  79. str.substr(4, 4);
  80.  
  81. event.target.text = mask;
  82.  
  83. }
  84.  
  85. else if ( str.length == 8 ) {
  86.  
  87. mask = str.substr(0, 2) + “/” + str.substr(2,2) + “/” +
  88.  
  89. str.substr(4, 4);
  90.  
  91. event.target.text = mask;
  92.  
  93. }
  94.  
  95. }
  96.  
  97. }
  98.  
  99. }
  100.  
  101. }

além desse componente precisamos de uma função que converta data para string e string para data, então crie mais um package utils e crie sua classe(sugeri Util.as) com essas funções, vamos ao código:

PLAIN TEXT
ACTIONSCRIPT:

  1. package com.saberprogramar.utils
  2.  
  3. {
  4.  
  5. import mx.formatters.DateFormatter;
  6.  
  7. public class Util
  8.  
  9. {
  10.  
  11. public static function stringToDate(data:String):Date{
  12.  
  13. if (data != “”) {
  14.  
  15. var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
  16.  
  17. return new Date(novaData);
  18.  
  19. }
  20.  
  21. else {
  22.  
  23. return null;
  24.  
  25. }
  26.  
  27. }
  28.  
  29. public static function dateToString(data:Date):String{
  30.  
  31. var format:DateFormatter = new DateFormatter();
  32.  
  33. format.formatString = “DD/MM/YYYY”;
  34.  
  35. return format.format(data);
  36.  
  37. }
  38.  
  39. }
  40.  
  41. }

pronto, agora é moleza,adicionamos um novo campo na view que é o nosso componente customizado:

PLAIN TEXT
CODE:

  1. <mx:FormItem label=“Data Fundação:” required=“true”>
  2.                     <components:DateFieldpt id=“txtDataFundcao”
  3.                         text=“{Util.dateToString(cidade.dataFundacao)}” tabIndex=“4″ />
  4.                 </mx:FormItem>

e pra finalizar em nossa action na function confirm adicionamos isso:

PLAIN TEXT
ACTIONSCRIPT:

  1. cidade.dataFundacao = Util.stringToDate(txtDataFundcao.text);

pronto, testa aí e você vai ver que já está funcionando, mas espera aí, ainda falta uma grande dica.

O HORÀRIO DE VERÂO BRASILEIRO!

Você vai testar agora, vai ver que está funcionando, vai ficar feliz e depois de um tempo pode acontecer de ter problemas com o nosso bendito horário de verão, explico, no Brazil não temos dia certo pra começar nem para terminar o bendito horário de verão, então como o sdk do java não utiliza a informaçao do sistema operacional(Windows, Linux, Mac) e sim do prório sdk, o sdk fica perdido com o nosso horário de verão. Mas como saber que estou tendo problemas?

  • Quando você mandar gravar uma data (23/01/2010)  essa data vai retroceder um dia (22/01/2010). Putz kara, é exatamente o que está me acontecendo, como eu resolvo isso?

simples :) um POG do bem..hehe quando você manda gravar uma data como fazemos aqui a data vai com o time (00:00:00), então quando chega no java o time volta, consequentemente um dia anteior com o time (22:00:00 ou as 23:00:00), então a forma mais rápida foi setar o time para 12:00:00 e por mais que o sdk volte o time ainda será o mesmo dia :) , então na nossa classe Util na função stringToDate ficará assim:

PLAIN TEXT
ACTIONSCRIPT:

  1. public static function stringToDate(data:String):Date{
  2.  
  3. if (data != “”) {
  4.  
  5. var novaData:String = data.substring(3,5) +“/”+ data.substring(0,2) +“/”+ data.substring(6);
  6.  
  7. var dateTime:Date = new Date(novaData);
  8.  
  9. dateTime.setHours(12,0,0,0);
  10.  
  11. return dateTime;
  12.  
  13. }
  14.  
  15. else {
  16.  
  17. return null;
  18.  
  19. }
  20.  
  21. }

fica aí a dica, aguardem que vem novos artigos para este tutorial, como atualização de swiz e relatórios integrando JAVA + FEX + IREPORT, até a próxima e bons estudos.

Cumps.

  • Share this on del.icio.us
  • Digg this!
  • Share this on Reddit
  • Share this on Technorati
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on FriendFeed
  • Send this page to Print Friendly

Similar Posts:

  • Formatando e Somando Datas no Flex
  • TUTORIAL JAVA + FLEX NA PRÁTICA 5/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 6/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 1/6
  • TUTORIAL JAVA + FLEX NA PRÁTICA 7/6 – Bônus

 TUTORIAL JAVA + FLEX NA PRÁTICA (8)   Datas

|

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2756 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com