Click - Programação Web orientada a Componentes e Eventos – Parte IV
Neste artigo será apresentado o Click, um framework Orientado a Páginas e Componentes, e ainda possui um modelo de programação b...
Estatísticas:










votos: 9
Serviços:

Click - Programação Web orientada a Componentes e Eventos – Parte IV
Reflexão
No exemplo anterior, os campos da Form e Table foram adicionados manualmente no código. Atualmente existe uma discussão no fórum do Click sobre construir estes objetos utilizando reflexão. Por exemplo, para um objeto Pessoa, gerar a Form correspondente automaticamente. De qualquer forma, isto é trivial de implementar, e atualmente precisa ser feito pelo programador.
Outra observação sobre a classe PessoaPage é que boa parte da lógica de negócios poderia ser movida para uma classe abstrata, como por exemplo os métodos onPost, onEdit, e onDelete. Uma “Interface” Java poderia ser utilzada para deixar o código ainda mais padronizado e simples.
Por exemplo, o seguinte código poderia ser construído para substituir a classe anterior:
public class PessoaPage extends CRUDPage {
protected Class getModelClass() {
return Pessoa.class;
}
protected BaseService getService() {
return new PessoaService();
}
}
No código acima, toda a lógica de negócios foi movida para a classe abstrata CRUDPage. Está fora do escopo do artigo, mostrar uma possível implementação para esta classe, vamos apenas discutir como isto poderia ser feito.
Na classe PessoaPage, apenas dois métodos precisariam ser implementados, o “getModelClass” e “getService”. O primeiro poderia retornar o objeto “Pessoa” que é utilizado para criar o Formulário e a Tabela utilizando reflexão. O método getService() poderia retornar uma implementação de BaseService, que seria a interface para a classe PessoaService que criamos anteriormente, a qual definiria os métodos (getPessoas,addPessoa, etc).
Este é apenas um exemplo, mas deixa claro como o Click favorece a utilização de Orientaçao a Objetos, e o quanto isto pode aumentar a produtividade, reduzir custos e prazos.
Outro Exemplo de aplicação CRUD
Desta vez, vamos dividir a classe “PessoaPage”, em duas: “PessoaTablePage” e “PessoaFormPage”, de uma forma que a Tabela e o Formulário estejam em páginas separadas. A imagem abaixo, demonstra o resultado:
Este exemplo ainda demonstra como o Click trabalha com Objetos. No código é possível verificar que não é utilizado o tradicional objeto request da API de Servlets:
request.setAttribute(“pessoa’,pessoa);
E ao invés disto é utilizado apenas métodos e objetos:
PessoaFormPage formPage = …
Pessoa p = ...
formPage.setPessoa(p);
setForward(formPage);
Abaixo o código das páginas. Note que é o mesmo exemplo, apenas o código está dividido em duas classes.
Þ pessoaTable.htm (página da Tabela)
$table
Þ pessoaForm.htm (página do Formulário)
$form
Þ PessoaTablePage.java
public class PessoaTablePage extends Page {
public Table table = new Table();
public ActionLink edit = new ActionLink(this,"onEdit");
public ActionLink delete = new ActionLink(this,"onDelete");
public PessoaTablePage(){
//Table
table.addColumn(new Column("id"));
table.addColumn(new Column("nome"));
//Links Editar e Deletar
Column column = new Column("Action");
ActionLink[] links = new ActionLink[]{edit, delete};
column.setDecorator(new LinkDecorator(table, links, "id"));
table.addColumn(column);
}
//listener: ao clicar no link "edit"
public boolean onEdit(){
PessoaFormPage formPage = (PessoaFormPage) getContext().createPage(PessoaFormPage.class);
Pessoa p = PessoaService.get(edit.getValueInteger());
formPage.setPessoa(p);
//Faz o forward para o Formulário passando a Pessoa pela Request
setForward(formPage);
return true;
}
//listener: ao clicar no link "delete"
public boolean onDelete(){
PessoaService.remove(delete.getValueInteger());
return true;
}
//atualiza a tabela após
public void onRender() {
table.setRowList(PessoaService.getPessoas());
}
}
Þ PessoaFormPage.java
public class PessoaFormPage extends Page {
public Form form = new Form();
private Pessoa pessoa = null;
public PessoaFormPage(){
//Form
form.add(new IntegerField("id",true));
form.add(new TextField("nome",true));
form.add(new Submit("salvar","Salvar Pessoa"));
}
public void onGet() {
//Ao clicar em Editar, a Pessoa é passada pela request
//Neste caso copia as informações do objeto Pessoa para a Form
if(this.pessoa != null){
form.copyFrom(pessoa);
}
}
//ao clicar em Salvar
public void onPost() {
if(form.isValid()){
Pessoa p = new Pessoa();
form.copyTo(p);
PessoaService.addPessoa(p);
//redireciona para a página da Tabela
setRedirect(PessoaTablePage.class);
}
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
}
Conclusão
O Click é um framework extremamente simples, fácil de aprender e utilizar.
No Click qualquer página HTML que o usuário está visualizando corresponde a uma classe Java. E por convenção, este mapeamento pode ser feito automaticamente, sem nenhuma configuração.
É possível gerar o código HTML automaticamente utilizando os componentes do Click, ou se necessário, escrever tudo manualmente. Cada componente da página (Tabelas, Formulários, Links, campos de Texto, etc) possui uma classe Java correspondente, como por exemplo: net.sf.click.control.Table, net.sf.click.control.Form, net.sf.click.control.ActionLink e net.sf.click.control.TextField.
Estes componentes são chamados de “Control”, e já encapsulam o código para recuperar o parâmetro da tela (HttpServletRequest) e de Validação (obrigatório, valor inteiro, etc). Por exemplo, o componente DateField já valida se o valor é uma data válida.
Cada “Control”, como por exemplo botões e links (ActionButton, ActionLink, Submit, etc), podem possuir métodos que respondem aos eventos da tela. Estes métodos são chamados de “listeners”. Desta forma, pode-se definir um método “doLogin” para executar sempre que o usuário clicar no botão “Login”.
O modelo de programação utilizado no Click é extremamente produtivo, e ainda permite reutilizar componentes e escrever muito menos código, e desta forma é possível diminuir prazos e custos.
O site do Click framework, possui uma excelente documentação que vale a pena conferir, assim como ótimos exemplos:
Þ http://click.sourceforge.net/
Þ http://click.sourceforge.net/docs/why-click.html
Þ http://click.sourceforge.net/docs/pages.html
Þ http://click.sourceforge.net/docs/controls.html
Þ http://click.sourceforge.net/docs/faq.html
Þ ClickIDE: http://www.sunvolt.com/confluence/display/CLKT/ClickIDE




Boas-Vindas a Ricardo Lecheta

[vídeo] Utilizando AJAX com a biblioteca Prototype - Parte 2

[vídeo] Utilizando AJAX com a biblioteca Prototype - Parte 1

[vídeo] Utilizando Sockets em Java - Parte 2

[vídeo] Utilizando Sockets em Java - Parte 1

[vídeo] JNI - Chamando métodos nativos em Java

Pattern Proxy

Fazendo cache de objetos com Hibernate - Parte II

Introdução ao Eclipse RCP

Fazendo cache de objetos com Hibernate - Parte I





[vídeo] Consumindo os dados via ajax – Consumindo dados com getJson do jQuery utilizando POCO EF 4.0 – Parte 3

[vídeo] Classe POCO – Consumindo dados com getJson do jQuery utilizando POCO EF 4.0 – Parte 1

Imprimindo Relatório : VCL Crystal Reports XI - Delphi

VCL Crystal Reports XI - Delphi

[vídeo] Gerenciamento das Comunicações - Curso Gerência de Projetos – Parte 8

[vídeo] Plano de Comunicação - Curso Gerência de Projetos – Parte 9

[vídeo] Seleção e Priorização de Projetos - Curso Gerência de Projetos – Parte 6

[vídeo] Escopo, metas, premissas, restrições - Curso Gerência de Projetos – Parte 7

[vídeo] Documento Conceitual do Projeto - Curso Gerência de Projetos – Parte 5


Você está em:




Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!


