A biblioteca http://java.sun.com/jsf/html possui os componentes básicos para renderização de telas em HTML.
Para utilizar esta biblioteca dentro da página xhtml, precisamos adicionar ela na propriedade da tag html e darmos um apelido (alias) para ela, por padrão é declarado da seguinte forma:
Usamos o alias h para referenciar a biblioteca html e para utilizar algum componente desta biblioteca utilizamos a sintaxe h: + nome da tag, exemplo: \<h:commandButton ...\>.
A biblioteca html possui os seguintes componentes: body, head, form, outputFormat, outpuLabel, outputLink, outputScript, outputStylesheet, outputText, button, commandButton, commandLink, link, graphicImage, inputHidden, inputSecret, inputText, inputTextarea, message, messages, selectBooleanCheckbox, selectManyCheckbox, selectManyListbox, selectManyMenu, selectOneListbox, selectOneMenu, selectOneRadio, dataTable, column, panelGrid e panelGroup.
Formulário
Quando montamos uma tela onde o usuário precisa entrar de alguma forma com uma informação, seja através de campos de digitação, itens de seleção, botões e outros, há a necessidade de criarmos um formulário.
Para enviar informações para o servidor, mais precisamente para uma ManagedBean precisamos criar um formulário e associar os campos da tela com os atributos do ManagedBean, exemplo:
Vamos criar um pequeno formulário para preencher informações e enviar uma mensagem para a tela com os dados recebidos.
Para isto vamos criar uma classe para representar um Contato:
Agora vamos criar um ManagedBean para armazenar os atributos e ações da página de cadastro dos contatos.
Criamos um simples ManagedBean com um atributo do tipo Contato e seus métodos get e set.
Vamos agora criar uma tela de cadastro de contatos que terá os campos de digitação do nome, telefone e data de nascimento de cada contato.
Nesta tela usamos as tags <h:form\> conteúdo do formulário </h:form> para informar a área que terá o formulário.
Seleção
Alguns componentes podem permitir que o usuário escolha uma opção, sem a necessidade de digitar alguma informação.
Com o componente h:selectOneRadio é possível mostrar diversas opções para que apenas uma possa ser selecionada.
Exemplo:
O código para montar esse h:selectOneRadio é:
As opções disponíveis nos componentes de seleção são criados com o componente f:selectItem, exemplo:
Nele podemos especificar um texto que será apresentado na tela com a propriedade itemLabel e utilizamos a propriedade itemValue para definir o seu valor.
Uma outra forma se apresentar diversas opções onde o usuário tenha que escolher apenas uma, é utilizando o componente h:selectOneListbox exemplo:
O código para montar esse h:selectOneListbox é:
O selectOneListbox possui diversas propriedades como size que informa o tamanho de elementos aparecerão na lista.
Com o componente h:selectOneMenu podemos montar um ComboBox onde é possível selecionar apenas uma opção também, exemplo:
O código para montar esse h:selectOneMenu é:
Se tivermos diversas opções onde o usuário pode selecionar mais de uma opção podemos utilizar uma lista com h:selectManyListbox, por exemplo:
O código para montar esse h:selectManyListbox é:
Também podemos usar o h:selectManyCheckbox para permitir que o usuário selecione mais de uma opção:
O código para montar esse h:selectManyCheckbox é:
Para armazenar quais as opções selecionadas podemos utilizar um vetor de private String[] redesSociais; , exemplo:
Um checkbox também pode ser utilizado para obter valores do tipo true (verdadeiro) ou false (falso), para isto utilizamos o h:selectBooleanCheckbox.
O código para montar esse h:selectManyCheckbox é:
Quando ele estiver selecionado significa true (verdadeiro), caso contrário significa false (falso), para armazenar este valor podemos utilizar um atributo private boolean ativo;, exemplo:
Tabela
Podemos definir uma tabela utilizando o componente h:dataTable, exemplo:
Para criar uma tabela podemos passar para ela um vetor ou lista através da propriedade value e com a propriedade var é criado uma variável para representar cada elemento do vetor ou lista, exemplo:
Foi passado para o dataTable uma lista de objetos Contato através da propriedade value="#{contatoMB.contatos}" e para cada objeto Contato da lista será armazenado em uma variável chamada c através da propriedade var="c" para ser utilizada dentro da tabela.
Para definir os valores de cada coluna podemos utilizar o componente h:column, exemplo:
Note que dentro da coluna estamos usando um f:facet que é usado para representar um cabecalho (header) ou rodapé (footer) da coluna.
O exemplo completo da cadastro de contato vai ficar da seguinte forma:
Contato
Na classe Contato vamos adicionar mais alguns atributos para representar todos os valores que podem ser informados pelo usuário.
ContatoMB
No ManagedBean vamos adicionar agora a lista de contatos que será apresentado na tela no formato de tabela.
index.xhtml
E na tela vamos adicionar mais alguns componentes de seleção do usuário e a tabela para apresentar todos os contratos cadastrados.
A tela da aplicação ficará assim depois de alguns cadastros:
Exercícios
Exercício 1
Crie um formulário para agendar a data/hora para fazer o café, dado o seguinte formulário:
Ao clicar no botão Agendar, apresentar uma tela com a seguinte informação: