JavaServer Faces é um framework MVC para o desenvolvimento de aplicações Web, que permite o desenvolvimento de aplicações para a internet de forma visual, ou seja, arrastando e soltando os componentes na tela (JSP), definindo propriedades dos mesmos.
O JavaServer Faces teve sua expressão na versão 1.1 quando implementado pela comunidade utilizando a especificação 127 do Java Community Process, evidenciando maturidade e segurança.
Hoje ele está na versão 1.2 da especificação 252 do JCP. A fundação Apache vem realizando esforços na implementação da especificação através do projeto MyFaces. O reconhecimento do trabalho é visto por diversas empresas, tanto é que a Oracle doou os fontes do ADF Faces, conjunto de mais de 100 componentes JSF, para o projeto MyFaces que o denominará de Trinidad.
O JSF é atualmente considerado pela comunidade Java como a última palavra em termos de desenvolvimento de aplicações Web utilizando Java, resultado da experiência e maturidade adquiridas com o JSP/Servlet (Model1), Model2 (MVC) e Struts.
Permite que o desenvolvedor crie UIs através de um conjunto de componentes UIs pré-definidos;
Fornece um conjunto de tags JSP para acessar os componentes;
Reutiliza componentes da página;
Associa os eventos do lado cliente com os manipuladores dos eventos do lado do servidor (os componentes de entrada possuem um valor local representando o estado no lado servidor);
Fornece separação de funções que envolvem a construção de aplicações Web.
Utiliza Ajax em alguns de seus componentes tornando alguns processos mais rápidos e eficientes.
Recursos visuais
O framework JSF permite a inserção, via IDE, de:
Folhas de estilo (CSS);
Comandos em Java Script;
Metodologia Ajax.
Desvantagens
A execução da aplicação se da quase que totalmente no lado servidor, salvo bibliotecas de componentes mais recentes implementadas usando Ajax;
O particionamento do código da aplicação entre cliente e servidor é fixo;
JSF inclui
Suporte a internacionalização e acessibilidade;
Um conjunto padrão de componentes de interface de usuário que possibilitam validação padronizada;
Duas bibliotecas de etiqueta ("tag libraries") especiais do JavaServer Pages (JSP) para expressar a interface do JavaServer Faces dentro de uma página JSP;
Um modelo de eventos do lado servidor ("server-side event model");
Gerência de estados;
Managed Beans (JavaBeans criados com injeção de dependência ("dependency injection"));
Linguagem de Expressão Unificada ("Unified Expression Language") para JSP 2.0 e JSF 1.2.
Ferramentas de desenvolvimento
Java Studio Creator
JBuilder
JDeveloper
MyEclipse
Netbeans
Rational Application Developer for WebSphere Software
Red Hat Developer Studio
Eclipse
Exemplo das Libs que são importadas numa pagina JSF:
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
O JSF nos permite criar a parte visual, porém simples, como essa exemplo abaixo: