SlideShare a Scribd company logo
1 of 81
Download to read offline
Os 10       (dez) maus
              hábitos dos
         desenvolvedores JSF

Rafael Ponte               Tarso Bessa
http://www.rponte.com.br   http://www.tarsobessa.com
rponte@gmail.com           tarso.bessa@gmail.com
Antes de mais nada, uma
  provocação gratuita
BRUNO PEREIRA




01/01/1990         19/09/2009
RIP - REST in Peace
                 BRUNO PEREIRA




    01/01/1990         19/09/2009
Voltando ao que
  interessa...
Quem?
“Rafael Ponte”              “Tarso Bessa”
●   Desenvolvedor           ●   Arquiteto Java
●   Coordenador do          ●   Entusiasta Java e JSF
    grupo JavaSF            ●   Membro do Cejug
●   Entusiasta Java e JSF   ●   Trabalha na Dataprev
●   Consultor da
    TriadWorks
JSF tenta encapsular
toda a complexidade no
desenvolvimento    web
com Java
A maioria dos desenvolvedores web que já
trabalharam ou trabalham com algum
framework “action-like” acabam tendo
grandes dificuldades ao desenvolverem
com JSF.
Criando-se   então   maus
hábitos..
10º Mau hábito
Usar <c:if/> ou <c:when/>
para esconder componentes
do usuário
<c:if test=”#{bean.admin}”>
 <h:dataTable var=”row”>
    <h:column>
      ...
    </h:column>
 </h:dataTable>
</c:if>
Usar <c:if/> ou <c:when/>
        SOLUÇÃO?
para esconder componentes
do usuário
Utilizar o atributo
    rendered dos
  componentes para
escondê-los do usuário
<c:if test=”#{bean.admin}”>
 <h:dataTable
     rendered=”#{bean.admin}”>
    <h:column>
      ...
    </h:column>
 </h:dataTable>
</c:if>
9º Mau hábito
Usar “stateless” EL no atributo
rendered em um componente que
dispare eventos
<h:commandButton value=”Salvar”
action=”#{bean.salvar}”
rendered=”#{bean.admin}” />
SOLUÇÃO?
Garantir a avaliação
consistente da EL entre
requisições.
session?
O uso indevido ou exarcebado da
session é prejudicial para a
aplicação.
mais longo que request | mais curto que session


✔ Myfaces Tomahawk [t:saveState]
✔ Myfaces Orchestra

✔ Myfaces Trinidad [pageFlowScope]

✔ JBoss Seam

✔ JBoss Richfaces [a4j:keepAlive]

✔ etc
8º Mau hábito
Usar <redirect/> nas regras
de navegação para forçar a
mudança da URL
SOLUÇÃO?
entendam
Simplesmente
 como funciona um
    REDIRECT
7º Mau hábito
Alterar o estado de algum
componente no lado cliente
[browser] através de javascript e
esperar que isso seja “entendido”
pelo JSF
Firebug
Firebug


SOLUÇÃO?
Alterar o estado do
componente no lado
servidor via AJAX e
  re-renderizar o
     componente
6º Mau hábito
Utilização    demasiada       de
parâmetros    de     request   e
desenvolvimento voltado a "chave
primária"
<h:dataTable value="#{users}" var="user">
   <h:column ...>
     <h:commandLink value="X"
       action="#{bean.remove}" >
       <f:param name="id"
           value="#{user.id}"/>
      </h:commandLink>
   </h:column>
</h:dataTable>
public void remove(){
  Integer id = new Integer(
  facesContext.getExternalContext().
      getRequestParametersMap().
      get(“id”) );
  User user = search(id);
  if(user != null){
    ...
  }
}
SOLUÇÃO?
Pensar mais orientado a
objetos e deixar com que os
  componentes troquem
  objetos e não “chaves
         primárias”
<h:dataTable value="#{users}" var="user">
   <h:column ...>
     <h:commandLink value="X"
       action="#{bean.remove}" >
       <f:setPropertyActionListener
           value="#{user}"
           target="#{bean.user}"/>
      </h:commandLink>
   </h:column>
</h:dataTable>
public void setUser(User user){
  this.user = user;
}

public void remove(){
  if(user != null){
     // ...
  }
}
É fundamental implementar os
métodos equals() e hashCode()
das entidades da aplicação.
5º Mau hábito
Usar o valor do submittedValue de
um componente como se fosse o
valor real do componente.
Apply
Restore                   Process
            Request
 View                    Validations
             Values




                          Update
 Render      Invoke
                          Model
Response   Application
                          Values
//immediate=false
private UIInput input;
//immediate=true
public void calcTaxes(ActionEvent e) {
   String dateStr = (String)
          input.getSubmittedValue();
   Date date = convertDate ( dateStr );

    if( date.after ( otherDate ) ) {
       //calculate
    }
}
SOLUÇÃO?
Dividir o formulário
   em subforms
private Date date;
//immediate=false
public void calcTaxes() {

    if( date.after ( otherDate ) ) {
       //calculate
    }
}
A quem recorrer?



✔ Myfaces Tomahawk [t:subform]
✔ Myfaces Trinidad [tr:subform]

✔ JBoss Richfaces [a4j:region]
4º Mau hábito
Implementam o
próprio mecanismo
 de SEGURANÇA
public class LoginPhaseListener
  implements PhaseListener {

    //on RESTORE_VIEW
    public void afterPhase(PhaseEvent e) {
      if( !isLoggedIn() && !isLogin() ){
         //navigate to login page
      }
    }
}
SOLUÇÃO?
Utilizem um framework
      especializado
Usar /faces/* ou *.jsf quando se tem
páginas em xhtml pode levar a uma
exposição do código fonte.
3º Mau hábito
Paginação de
registros na session
Uma das melhores maneiras de
matar a escalabilidade da
aplicação    é    a    utilização
indiscriminada da session
SOLUÇÃO?
Paginação sob
  demanda
2º Mau hábito
Efetuar consultas de
      maneira
   INEFICIENTE
<h:dataTable
  value="#{bean.usersList}"
  var="user">
  <h:column ...>
    ...
  </h:column>
</h:dataTable>
public class Bean {

    public List<User> getUsersList() {
      return service.findAllUsers();
    }
}
SOLUÇÃO?
Usar consultas
em eventos ou
  callbacks
- Callback -

 public class Bean {

     @PostConstruct
     public void initialize(){
        this.users = service.findAllUsers();
     }

     public List<User> getUsersList() {
       return this.users;
     }
 }
- Evento -

public class Bean {

    public void search(ActionEvent e){
       this.users = service.findUsers( … );
    }

    public List<User> getUsersList() {
      return this.users;
    }
}
1º Mau hábito
1º -e o pior- Mau hábito
JSF LIFECYCLE
JSF LIFECYCLE




    A maioria dos
desenvolvedores NÃO
      entendem
JSF LIFECYCLE




SOLUÇÃO?
http://balusc.blogspot.com
/2006/09/debug-jsf-lifecycle.html




Entendam o
ciclo de vida
Concluindo..
Perguntas?
Obrigado!

Rafael Ponte                  Tarso Bessa
twitter.com/rponte   twitter.com/tarsobessa

More Related Content

What's hot

【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)
外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)
外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)Yohei Onishi
 
「にじたい」へのいざない #ロマンティック数学ナイト
「にじたい」へのいざない #ロマンティック数学ナイト「にじたい」へのいざない #ロマンティック数学ナイト
「にじたい」へのいざない #ロマンティック数学ナイトJunpei Tsuji
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#bleis tift
 
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-Fumiya Nozaki
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em PythonRicardo Paiva
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】Hiro H.
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
组织行为学:理论、方法与艺术
组织行为学:理论、方法与艺术组织行为学:理论、方法与艺术
组织行为学:理论、方法与艺术Yanjun Song
 
Python 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapyPython 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapy敦志 金谷
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Pythonkwatch
 
Shunsuke Horii
Shunsuke HoriiShunsuke Horii
Shunsuke HoriiSuurist
 
Hadoop - primeiros passos
Hadoop - primeiros passosHadoop - primeiros passos
Hadoop - primeiros passosrhpinotti
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論MITSUNARI Shigeo
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向Shinya Takamaeda-Y
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
 

What's hot (20)

【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)
外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)
外乱光対策にまいまい式を使おう(ETロボコン2011東京連合第1回)
 
「にじたい」へのいざない #ロマンティック数学ナイト
「にじたい」へのいざない #ロマンティック数学ナイト「にじたい」へのいざない #ロマンティック数学ナイト
「にじたい」へのいざない #ロマンティック数学ナイト
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
仕事で使うF#
仕事で使うF#仕事で使うF#
仕事で使うF#
 
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em Python
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
Aula 7 – linguagem HTML - Frames
Aula 7 – linguagem HTML - FramesAula 7 – linguagem HTML - Frames
Aula 7 – linguagem HTML - Frames
 
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
その文字列検索、std::string::findだけで大丈夫ですか?【Sapporo.cpp 第8回勉強会(2014.12.27)】
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
组织行为学:理论、方法与艺术
组织行为学:理论、方法与艺术组织行为学:理论、方法与艺术
组织行为学:理论、方法与艺术
 
Python 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapyPython 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapy
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
Shunsuke Horii
Shunsuke HoriiShunsuke Horii
Shunsuke Horii
 
Hadoop - primeiros passos
Hadoop - primeiros passosHadoop - primeiros passos
Hadoop - primeiros passos
 
templateとautoの型推論
templateとautoの型推論templateとautoの型推論
templateとautoの型推論
 
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
Map
MapMap
Map
 

Viewers also liked

Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Rafael Ponte
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoRafael Ponte
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Rafael Ponte
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Rafael Ponte
 
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Rafael Ponte
 
Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Rafael Ponte
 

Viewers also liked (7)

Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016
 
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto CriticoLidando com o Caos: Testando Código PLSQL em um Projeto Critico
Lidando com o Caos: Testando Código PLSQL em um Projeto Critico
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)Importancia dos Testes Automatizados no dia a dia (Don't Panic)
Importancia dos Testes Automatizados no dia a dia (Don't Panic)
 
Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)Migrations for Java (QCONSP2013)
Migrations for Java (QCONSP2013)
 

Similar to Os 10 maus hábitos dos desenvolvedores JSF

Os 10 Maus Hábitos dos Desenvolvedores JSF
Os 10 Maus Hábitos dos Desenvolvedores JSFOs 10 Maus Hábitos dos Desenvolvedores JSF
Os 10 Maus Hábitos dos Desenvolvedores JSFtarsobessa
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1Sliedesharessbarbosa
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EELoiane Groner
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebElenilson Vieira
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrízio Mello
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08Gilson Silva
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
 
Dicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App AndroidDicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App AndroidUbiratan Soares
 
Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Rodrigo Rocha
 

Similar to Os 10 maus hábitos dos desenvolvedores JSF (20)

Os 10 Maus Hábitos dos Desenvolvedores JSF
Os 10 Maus Hábitos dos Desenvolvedores JSFOs 10 Maus Hábitos dos Desenvolvedores JSF
Os 10 Maus Hábitos dos Desenvolvedores JSF
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 
Sistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias WebSistema S2DG e Tecnologias Web
Sistema S2DG e Tecnologias Web
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Android + firebase
Android + firebaseAndroid + firebase
Android + firebase
 
WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08WEB 2 - Aula 01 - 02.08
WEB 2 - Aula 01 - 02.08
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
Dicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App AndroidDicas para Interfaces Performáticas no seu App Android
Dicas para Interfaces Performáticas no seu App Android
 
Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)Introdução ao Android (minicurso 4h)
Introdução ao Android (minicurso 4h)
 

More from Rafael Ponte

TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSETechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSERafael Ponte
 
TechDay Retrospectiva 2018
TechDay Retrospectiva 2018TechDay Retrospectiva 2018
TechDay Retrospectiva 2018Rafael Ponte
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeRafael Ponte
 
Como treinar seu estagiario
Como treinar seu estagiarioComo treinar seu estagiario
Como treinar seu estagiarioRafael Ponte
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Rafael Ponte
 
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Rafael Ponte
 
Importância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaImportância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaRafael Ponte
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Rafael Ponte
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for JavaRafael Ponte
 
Importância dos testes automatizadoss
Importância dos testes automatizadossImportância dos testes automatizadoss
Importância dos testes automatizadossRafael Ponte
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFRafael Ponte
 
Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Rafael Ponte
 
Os 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFOs 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFRafael Ponte
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Rafael Ponte
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeRafael Ponte
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 

More from Rafael Ponte (18)

TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSETechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
TechDay: 10 Features do Oracle que voce nao conhecia - CONNECT BY CLAUSE
 
TechDay Retrospectiva 2018
TechDay Retrospectiva 2018TechDay Retrospectiva 2018
TechDay Retrospectiva 2018
 
Arquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do HypeArquitetura Java - Escalando além do Hype
Arquitetura Java - Escalando além do Hype
 
Como treinar seu estagiario
Como treinar seu estagiarioComo treinar seu estagiario
Como treinar seu estagiario
 
Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)Migrations for Java (Javou #4 - JavaCE)
Migrations for Java (Javou #4 - JavaCE)
 
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
Importancia dos Testes Automatizados no dia a dia FIC-Estacio 2015
 
Importância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a diaImportância dos testes automatizados no dia a dia
Importância dos testes automatizados no dia a dia
 
Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)Hibernate Efetivo (QCONSP-2012)
Hibernate Efetivo (QCONSP-2012)
 
Migrations for Java
Migrations for JavaMigrations for Java
Migrations for Java
 
Importância dos testes automatizadoss
Importância dos testes automatizadossImportância dos testes automatizadoss
Importância dos testes automatizadoss
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 
Curso de Java server faces (JSF)
Curso de Java server faces (JSF)Curso de Java server faces (JSF)
Curso de Java server faces (JSF)
 
Os 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFOs 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSF
 
Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)Boas Práticas com JavaServer Faces (Jsf)
Boas Práticas com JavaServer Faces (Jsf)
 
JavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividadeJavaServer Faces - Desenvolvendo aplicações web com produtividade
JavaServer Faces - Desenvolvendo aplicações web com produtividade
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 

Os 10 maus hábitos dos desenvolvedores JSF