Whats new? | Login
Cadastre-se | Atendimento | RSS
 
Live chat by Netwatts
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos
Você está em: / canal Java [artigos]
   + Java:   artigos   |   vídeos   |    cursos   |    mais
 
 
Outras seções:
Home 
Entenda o site 
Revistas 
Canais 
Cursos 
Palestras 
Suporte 
Fórum 
Oportunidades 
 Todos os links 

 
  Ir para o Canal Java  
+Canais:
Canal Delphi 
Canal Java 
Canal .net 
Canal Banco de dados 
Canal Mobile 
Canal Ruby on Rails 
Canal PHP 
Canal ASP 
Canal WebDesign 
Canal Engenharia de Software 
Canal Linux 
Canal Scripting 
Canal Outros 
  Todo conteúdo DevMedia 

 
  ver cursos de Java  
+Cursos:
Cursos de Java 
Cursos de .net 
Cursos de Banco de dados 
Cursos de Delphi 
Cursos de Engenharia de Software 
Cursos de Ruby on Rails 
Cursos de ASP 
Cursos de WebDesign 
Cursos de PHP 
Cursos de PalmOS 
Cursos de Linux 
Cursos de Scripting 
  Formações completas 
  Todos os cursos 

 
Canal de conteúdo Java
Revista Java Magazine
Suporte Java
Palestras de Java
E-books de Java
Downloads de Java
 

+Revistas:
ClubeDelphi 
.net Magazine 
Java Magazine 
webMobile Magazine 
SQL Magazine 
Engenharia de Software Magazine 
  Edições anteriores impressas 
  Todas as revistas 


[Fechar]
Este post está disponível para quem é assinante da Java Magazine ou para quem possui Créditos DevMedia.


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

Plano conveniência – Neste plano este post custa R$ 0,00 (Compre agora)
Esse plano permite que você compre somente um post, pagando por ele seu preço sem desconto.

Plano ocasional: Aqui este post custa: R$ 0,00 (assinante) ou R$ 0,00 (não-assinante)
Este plano é ideal para quem tem interesse em mais de um post. Você compra um mínimo de R$ 50,00 em créditos e ganha, em média, 50% de desconto no preço do post. Compre Créditos agora!

Assinatura de Créditos (Plano econômico) – Aqui este post custa R$ 0,00
Este plano é ideal para quem tem interesse em muitos posts. Com esse plano você compra R$ 180,00 em créditos e ganha, em média, 80% de desconto no preço do post. Assine este plano agora!

> Saiba mais sobre o Sistema de Créditos DevMedia


Click - Programação Web orientada a Componentes e Eventos – Parte IV

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:

 

clickfig08.JPG

 

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





Ricardo Rodrigues Lecheta
Ricardo Rodrigues Lecheta (ricardolecheta@terra.com.br), é autor do livro “Google Android” - Aprenda a criar aplicações para dispositivos móveis utilizando o Android SDK e possui as certificações SCJP, SCWCD, SCBCD, SCMAD, SCEA.
Ver space do autor


Estatísticas deste post:
Visualizações:  5333
Favoritado:  4 vez(es)
 
Conteúdo:
Didática:
Utilidade:
6 3
Feedbacks: 9

  Central de Serviços:
Inclua seu próprio artigo! (ajuda)
Participe! Inclua um comentário
Adicionar este post a Favoritos
Marcar este post como lido/assistido
Inclua uma anotação pessoal (ajuda)
RSS Feeds
Versão para impressão



Participe! Inclua um comentário
[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


[Fechar]

Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
2009 - Todos os Direitos Reservados a DevMedia Group