Home Tags e Componentes do JSF - Jakarta EE
Post
Cancelar

Tags e Componentes do JSF - Jakarta EE

Baseado nos cursos da Softblue

Tags do JS

  • Páginas JSF são compostas por tags

  • JSF suporta diversas bibliotecas de tags

NomeNamespacePrefixo
HTMLhttp://xmlns.jcp.org/jsf/htmlh:
Corehttp://xmlns.jcp.org/jsf/coref:
Faceletshttp://xmlns.jcp.org/jsf/faceletsui:
  • As tags padrão do HTML também são suportadas
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
  ...
</h:head>
<h:body>
  ...
<h:body>
</html>

O prefixo é utilizado na referência de determinada tag

Tags sem Representação Gráfica

Cabeçalho da página

1
2
3
<h:head>
  ...
</h:head>

Corpo da página

1
2
3
<h:body>
  ...
</h:body>

Formulários

1
2
3
<h:form>
  ...
</h:form>

Referência a arquivos JavaScript

1
<h:outputScript name="script.js" library="script" />

Referência a arquivos CSS

1
<h:outputStylesheet name="style.css" library="css" />

Textos e Imagens

Exibe texto na página

1
<h:outputText value="Boa tarde, #{bean.nome}!" />

Exibe texto na página, possibilitando a formatação do mesmo

1
2
3
4
<h:outputFormat value="{0}, {1}!">
  <f:param value="#{bean.mensagem}" />
  <f:param value="#{bean.nome}" />
</h:outputFormat>

Exibe uma imagem

1
<h:graphicImage url="/images/figura.jpg" />

Caixas de Texto

Caixa de digitação de texto

1
<h:inputText value="#{bean.texto}" />

Caixa de digitação de senha

1
<h:inputSecret value="#{bean.texto}" />

Caixa de digitação de texto em múltiplas linhas

1
<h:inputTextarea value="#{bean.itens}" rows="3" cols="10" />

Campos Hidden

Campo que pertence ao formulário mas não é exibido

1
<h:inputHidden value="#{bean.id}" />

Seleção de Itens: Checkboxes

Checkbox para um único item Mapeado para um boolean no bean

1
<h:selectBooleanCheckbox value="#{bean.ativo}" />

Checkbox para múltiplos itens Mapeado para um array ou coleção no bean

1
2
3
4
5
<h:selectManyCheckbox value="#{bean.alimentos}">
  <f:selectItem itemValue="1" itemLabel="Macarrão" />
  <f:selectItem itemValue="2" itemLabel="Feijão" />
  <f:selectItem itemValue="3" itemLabel="Arroz" />
</h:selectManyCheckbox>

Checkbox para múltiplos itens com lista dinâmica

1
2
3
<h:selectManyCheckbox value="#{bean.alimentos}">
  <f:selectItems value="#{bean.listaAlimentos}" />
</h:selectManyCheckbox>

A lista de elementos é fornecida pelo bean…

1
2
3
4
5
private SelectItem[] listaAlimentos = { 
  new SelectItem("1", "Macarrão"), 
  new SelectItem("2", "Feijão"), 
  new SelectItem("3", "Arroz") 
}; 

Checkbox para múltiplos itens com lista dinâmica de qualquer tipo

1
2
3
<h:selectManyCheckbox value="#{bean.alimentos}">
  <f:selectItems value="#{bean.listaAlimentos}" var="a" itemValue="#{a.id}" itemLabel="#{a.nome}" /> 
</h:selectManyCheckbox>

A lista de elementos é fornecida pelo bean…

1
2
3
4
5
private List<Alimento> listaAlimentos = Arrays.asList(new Alimento[] {
  new Alimento(1, "Macarrão"), 
  new Alimento(2, "Feijão"), 
  new Alimento(3, "Arroz") 
});

A classe Alimento possui os atributos id e nome, e os getters/setters correspondentes

Seleção de Itens: Radio Buttons

Radio button para seleção de um item entre vários

1
2
3
4
5
<h:selectOneRadio value="#{bean.alimento}">
  <f:selectItem itemValue="1" itemLabel="Macarrão" />
  <f:selectItem itemValue="2" itemLabel="Feijão" />
  <f:selectItem itemValue="3" itemLabel="Arroz" />
</h:selectOneRadio>

A tag f:selectItems também pode ser utilizada com radio buttons

Seleção de Itens: Menus

Caixa de seleção de um único item

1
2
3
4
5
6
<h:selectOneMenu value="#{bean.alimento}">
  <f:selectItem itemLabel="Selecione" noSelectionOption="true" />
  <f:selectItem itemValue="1" itemLabel="Macarrão" />
  <f:selectItem itemValue="2" itemLabel="Feijão" />
  <f:selectItem itemValue="3" itemLabel="Arroz" />
</h:selectOneMenu>

A tag f:selectItems também pode ser utilizada com menus

Seleção de Itens: Listboxes

Lista de seleção de um único item

1
2
3
4
5
<h:selectOneListBox value="#{bean.alimento}">
  <f:selectItem itemValue="1" itemLabel="Macarrão" />
  <f:selectItem itemValue="2" itemLabel="Feijão" />
  <f:selectItem itemValue="3" itemLabel="Arroz" />
</h:selectOneListBox>

Lista de seleção de múltiplos itens

1
2
3
4
5
<h:selectManyListBox value="#{bean.alimentos}">
  <f:selectItem itemValue="1" itemLabel="Macarrão" />
  <f:selectItem itemValue="2" itemLabel="Feijão" />
  <f:selectItem itemValue="3" itemLabel="Arroz" />
</h:selectManyListBox>

A tag f:selectItems também pode ser utilizada com listboxes

Botões

Botão que envia uma requisição ao servidor (POST)

1
<h:commandButton value="Processar Pedido" action="#{bean.processar}" />

Botão que envia uma requisição ao servidor (GET)

1
<h:button value="Processar Pedido" outcome="page" />

Link que envia uma requisição ao servidor (POST)

1
2
3
<h:commandLink action="#{bean.processar}">
  Processar Pedido
</h:commandLink>

Link que envia uma requisição ao servidor (GET)

1
<h:link value="Processar Pedido" outcome="page" />

Link que não submete dados ao servidor

1
2
3
<h:outputLink value="http://joaonogueira.dev">
  João Nogueira
</h:outputLink>

Painéis

  • São utilizados para organizar componentes em tabelas

  • Definidos pela tag h:panelGrid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<h:panelGrid columns="2">
  <f:facet name="header">
    <h:outputText value="Cadastro de Cliente" />
  </f:facet>
  <h:outputText value="Nome:" />
  <h:inputText value="#{bean.nome}" />
  <h:outputText value="E-mail:" />
  <h:inputText value="#{bean.email}" />
  <h:outputText value="Endereço:" />
  <h:inputText value="#{bean.endereco}" />
  <h:outputText value="Telefone:" />
  <h:inputText value="#{bean.telefone}" />
  <f:facet name="footer">
    <h:commandButton value="OK" action="#{bean.cadastrar}" />
  </f:facet>
</h:panelGrid>

Agrupando Componentes

  • Ao utilizar painéis, é possível agrupar componentes em uma mesma coluna

  • A tag h:panelGroup é utilizada

1
2
3
4
5
6
7
8
9
10
11
12
<h:panelGrid columns="2">
  <h:outputText value="Nome:" />
  <h:panelGroup>
    <h:inputText value="#{bean.nome}" />
    <h:outputText value="Nome do cliente"></h:outputText>
  </h:panelGroup>
  <h:outputText value="E-mail:" />
  <h:panelGroup>
    <h:inputText value="#{bean.email}" />
    <h:outputText value="E-mail do cliente"></h:outputText>
  </h:panelGroup>
</h:panelGrid>

ID de um Componente

  • Todo componente pode ter um ID associado

  • Um componente com ID pode ser referenciado:

– Por outros componentes JSF

– No código Java

– Em chamadas JavaScript

1
<h:inputText id="txtNome" value="#{bean.nome}" />

Renderização de Componentes

  • Todo componente pode ser renderizado ou não

  • Isto é controlado pelo atributo rendered

É possível utilizar value expressions

1
<h:inputText value="#{bean.nome}" rendered="false" />

JavaScript e Componentes JSF

  • É possível integrar componentes JSF com código JavaScript
1
2
3
4
5
6
7
8
9
10
11
<h:form id="pageForm">
  <h:panelGrid columns="3">
    <h:outputText value="Nome:" />
    <h:inputText id="txtNome" value="#{bean.nome}" />
    <h:commandButton
      value="Excluir" 
      action="#{bean.processar}" 
      onclick="return excluir(this.form);"
    />
  </h:panelGrid>
</h:form>

O componente deve ser referenciado como idForm:idComp

1
2
3
4
5
6
7
function excluir(form) {
  var nome = form["pageForm:txtNome"].value;
  if (confirm("Excluir o nome " + nome + "?")) {
    return true;
  }
  return false;
}

Se a tag h:form tiver o atributo prependId=“false”, os componentes não recebem o ID do formulário como prefixo

Resources

  • Permite referenciar recursos, que podem estar separados em bibliotecas

– Imagens, arquivos CSS, arquivos JavaScript

Referenciando Resources

  • Imagens
1
<h:graphicImage name="imagem.jpg" library="images" />
  • Arquivos CSS
1
<h:outputStylesheet name="styles.css" library="css" />
  • Arquivos JavaScript
1
<h:outputScript name="scripts.js" library="javascript" />
Esta postagem está licenciada sob CC BY 4.0 pelo autor.