Home Utilizando AJAX com JSF - Jakarta EE
Post
Cancelar

Utilizando AJAX com JSF - Jakarta EE

Baseado nos cursos da Softblue

AJAX

  • Asynchronous JavaScript and XML

  • Permite fazer uma requisição parcial ao servidor e obter uma resposta

– Dados são enviados ao servidor sem que a página precise ser completamente atualizada

  • Sistemas modernos têm adotado o AJAX, pois ele possibilita uma melhor experiência de navegação aos usuários

AJAX e o JSF

  • Uma página JSF é composta por componentes

  • Em uma requisição HTTP normal

– Todos os componentes da página são processados no servidor

– Todos os componentes são renderizados para serem exibidos na tela

  • Em uma requisição AJAX é diferente

– Na requisição, apenas alguns componentes são processados

– Ao receber a resposta, alguns componentes são renderizados

Ciclo de Vida de Requisições AJAX

graph TD
  subgraph Execução
    A((AJAX Request)) --> B(Restore View) --> C(Apply Request Values) --> D(Process Validations) --> E(Update Model Values)
    E --> F(Invoke Application)
  end
  subgraph Renderização
    F --> G(Render Response) --> H((AJAX Response))
  end 

A Tag f:ajax

  • Utilizada para adicionar requisições AJAX a uma página JSF
1
2
3
4
5
6
7
<h:panelGrid columns="3">
  Número:
  <h:inputText id="num" value="#{bean.num}">
    <f:ajax event="keyup" execute="@this" render="error" />
  </h:inputText>
  <h:message id="error" for="num" style="color: red" />
</h:panelGrid>
AtributoDescrição
eventEvento que dispara a requisição AJAX (keyup, keydown, blur, change, etc.)
executeComponentes a serem processados no servidor
renderComponentes da tela a serem renderizados na resposta
1
2
3
<f:ajax event="keyup" execute="@this" render="error" />

<h:message id="error" for="num" />

Atributo event

  • Identifica o evento que vai disparar a requisição AJAX
blurfocusmousedownmouseup
changekeydownmousemoveselect
clickkeypressmouseoutaction
dblclickkeyupmouseovervalueChange
  • Eventos de componentes

– action

  • Botões e links

– valueChange

  • Componentes de entrada de dados

Atributo execute

  • Define os componentes que serão executados (processados) no servidor

  • Para mais de um componente, os IDs devem ser separados por espaços em branco

  • Palavras-chave permitidas:

@thisComponente onde a tag f:ajax foi inserida
@formTodos os componentes do formulário
@allTodos os componentes da página
@noneNenhum componente

Atributo render

  • Define os componentes que serão renderizados na resposta da requisição

  • Para mais de um componente, os IDs devem ser separados por espaços em branco

  • Palavras-chave permitidas:

@thisComponente onde a tag f:ajax foi inserida
@formTodos os componentes do formulário
@allTodos os componentes da página
@noneNenhum componente

Grupos de Componentes AJAX

  • A tag f:ajax também pode ser utilizada para criar um grupo de componentes AJAX
1
2
3
4
5
6
7
8
9
<f:ajax event="blur" render="@form">
  <h:form>
    ...
    <h:inputText id="num1" value="#{bean.num1}" />
    ...
    <h:inputText id="num2" value="#{bean.num2}" />
    ...
  </h:form>
</f:ajax>

AJAX, JSF e JavaScript

  • A tag f:ajax possui dois parâmetros que podem referenciar funções JavaScript

onevent

onerror

O Atributo onevent

  • A função definida em onevent é chamada três vezes para cada requisição AJAX

– No início da requisição (begin)

– Quando a requisição é processada (complete)

– Quando a resposta está prestes a ser renderizada (success)

1
<f:ajax event="blur" onevent="process">
1
2
3
4
5
<script>
function process(data) {
  ...
}
</script>
AtributoDescrição
statusStatus da requisição AJAX: begin, complete, success
sourceComponente que originou o evento
responseXMLResposta da requisição AJAX (XML)
responseTextResposta da requisição AJAX (texto)
responseCodeCódigo de resposta HTTP para a requisição

O Atributo onerror

  • A função definida em onerror é chamada quando algum erro acontece no processamento da requisição

  • A função recebe um objeto data, semelhante à função usada em onvent

  • Possui um atributo extra status

ValorDescrição
httpErrorCódigo de retorno do HTTP inválido ou inexistente
emptyResponseServidor não enviou resposta para a requisição
malformedXMLA resposta não é um XML válido
serverErrorOcorreu algum problema no servidor

Biblioteca JavaScript do JSF

  • O JSF possui uma biblioteca JavaScript própria
1
<h:outputScript library="javax.faces" name="jsf.js" />
  • Esta biblioteca possui diversas funções para quem deseja trabalhar diretamente com JavaScript

  • Maiores informações sobre esta API podem ser encontradas na especificação do JSF

Esta postagem está licenciada sob CC BY 4.0 pelo autor.