ProgressBar–Utilizando o recurso de barras de progresso do Next
O Next oferece um recurso de barra de progresso através da tag <n:progressbar>. O programador não precisa lidar com as funcionalidades AJAX envolvidas nesse processo. Nesse tutorial é mostrado um exemplo de utilização dessa tag.
A funcionalidade da barra de progressos pode ser dividida conceitualmente em três partes:
- Um objeto da interface ProgressTask que representa a tarefa a ser executada.
- A exibição para o usuário, criada através da tag <n:progressbar>.
- E o modelo, representado pela interface IProgressMonitor, que é atualizado pela tarefa e exibido pelos componentes gerados pela tag.
- O resultado final da barra de progresso é mostrado abaixo:
O primeiro passo para se utilizar a barra de tarefas é criar a tarefa. Uma tarefa é uma classe que implementa a interface ProgressTask. Essa interface define apenas um método run que deve conter o algoritmo de execução da tarefa. O código abaixo mostra um exemplo de tarefa utilizando uma classe anônima.
ProgressTask tarefa = new ProgressTask() {
public void run(IProgressMonitor progressMonitor) throws Exception {
// aqui vem o código da tarefa
}
};
O método run recebe como parâmetro um IProgressMonitor. Através desse objeto é possível atualizar o estado da tarefa. O primeiro passo para inicialização da tarefa é chamar o método beginTask, que recebe o nome da tarefa e a quantidade de trabalhos que essa tarefa irá executar. Se uma tarefa irá iteragir em 50 elementos, é interessante chamar o beginTask com o valor de 50. Exemplo:
progressMonitor.beginTask(“Iniciando progresso”, 50);
Para cada etapa da tarefa cumprida, chama-se o método worked, passando como parâmetro a quantidade de trabalho realizado. Exemplo:
progressMonitor.worked(1);
Com a tarefa criada é possível criar a parte visual da barra de progressos. A barra de progressos e a tarefa utilizam o mesmo objeto IProgressMonitor para se manterem sincronizadas. Um objeto IProgressMonitor deve ser conseguido através da classe ProgressTaskFactory. O exemplo abaixo mostra como conseguir um IProgressMonitor para uma tarefa.
IProgressMonitor progressMonitor = ProgressTaskFactory.startTask(tarefa);
Esse progressMonitor deve ser salvo no request, e então utilizado pela tag <n:progressbar> no JSP, como mostra o exemplo abaixo:
<n:progressBar progressMonitor=”${progressMonitor}”/>
Veja o código fonte das classes para mais informações sobre a barra de progresso. Um objeto da interface ProgressTask não pode acessar o request quando uma tarefa é executada. Por isso, todas as informações que a tarefa irá precisar devem ser capturadas do request antes de a tarefa ser inicializada.
O exemplo abaixo mostra o código completo de um controller e um JSP que utilizam a barra de progresso.
Controller
package org.next.example.progressbar; |
Java2html |
JSP
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> |
Java2html |