Cadastre-se Revistas DevMedia Cursos
 

Space de CLáUDIO SANTOS DAS VIRGENS
Busca Autor


Últimas 20 atualizações de CLáUDIO SANTOS DAS VIRGENS

Artigo - Métodos de Validação em JSF – Parte V

Métodos de Validação em JSF – Parte V

 

Criando um componente de validação personalizado

 

Quando a validação não esta amarrada a lógica de negócio da aplicação, mas nenhum dos validadores padrão do JSF não é o suficiente.

 

Vamos implementar um componente personalizado de validação, para isso precisaremos de uma classe que implemente a interface Validator e possua um método chamado validate, único método definido pela interface.

 

void validate(FacesContext context, UIComponent componente,Object value)

 

Quando uma validação falha, devemos gerar uma FacesMessage que descreva o erro, construa uma ValidadorException e apresente-a:

 

if (vlPgto < vlMinimo) {

                  FacesMessage message = new FacesMessage(

                             "Pagamento abaixo do valor minimo aceitável:"

                             + " (R$"

                                         + vlMinimo + ").");

                  throw new ValidatorException(message);

            }

      }

 

Crie um pacote chamado fatura.model e nele crie a classe FaturaBean conforme mostrado a seguir:

 

package fatura.model;

 

public class FaturaBean {

     

      private String clienteNome; 

      private double valorPagto;

     

 

      public String getClienteNome() {

            return (clienteNome);

      }

      public void setClienteNome(String nome) {

            this.clienteNome = nome;

      }

 

      public double getValorPagto() {

            return (valorPagto);

      }

 

      public void setValorPagto(double valorPg) {

            this.valorPagto = valorPg;

      }    

      public String efetuarPagto() {

            return ("success");

      }

 

}

 

A classe FaturaBean tem dois atributos definidos como private e seus métodos de acesso (getters e setters) além do método efetuarPagto() que retorna uma string.

 

package fatura.control;

 

import javax.faces.application.FacesMessage;

import javax.faces.component.UIComponent;

import javax.faces.context.FacesContext;

import javax.faces.validator.Validator;

import javax.faces.validator.ValidatorException;

 

public class Validacao implements Validator {

 

      @Override //comente essa linha se estive usando jdk 1.4

      public void validate(FacesContext context, UIComponent componente,Object value)

      throws ValidatorException {

     

      //Em uma situação real estes campos deveriam estar definidos como privados

      double vlPgto = ((Double) value).doubleValue();

      double vlMinimo = vlMinimoPgto();

     

      if (vlPgto < vlMinimo) {

                  FacesMessage message = new FacesMessage(

                             "Pagamento abaixo do valor minimo aceitável:"

                             + " (R$"

                                         + vlMinimo + ").");

                  throw new ValidatorException(message);

            }

      }

 

      public double vlMinimoPgto() {

            /** Em uma situação real este valor retornado seria

             * originado de uma consulta ao banco de dados

            */

            return (10.00);

      }

 

}

 

Além disso, precisaremos de uma classe auxiliar ao validator para que através dela o validador seja reconhecido, nesse momento ela instancia a classe Validacao.

 

Crie em fatura.control a classe TagValidacao:

 

package fatura.control;

 

import javax.faces.validator.Validator;

import javax.faces.webapp.ValidatorTag;

import javax.servlet.jsp.JspException;

 

@SuppressWarnings("serial") //comente essa linha se estive usando jdk 1.4

public class TagValidacao extends ValidatorTag {

     

      public TagValidacao() {

            super();

            setId("Validacao");

      }

     

      protected Validator createValidator() throws JspException{

            return new Validacao();     

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
18/03/2008 19:00:00





Artigo - Métodos de Validação em JSF - Parte IV

Métodos de Validação em JSF - Parte IV

 

Validação Explícita Automática

A Validação Explícita Automática é útil quando você não quer deixar a validação de campos atada a lógica de negócio de uma aplicação e situações em que o que você precisa apenas é chegar um determinado tipo de dados, o valor mínimo ou máximo de um campo ou a quantidade de caracteres.

 

A implementação é muito parecida com a Validação Explícita Simples, exceto por:

 

Faz-se uso das tags <f:validadeLength/>, <f:validateDoubleRange/> e <f:validateLongRange/> do Java Server Faces.

Ex:

 

<h:inputText value="#{ApostaBean2.nome}"

 id="nome">

<f:validateLength minimum="5" maximum="16"/>

</h:inputText></TD>

 

O que significa que o campo nome deve ter no mínimo 5 e no máximo 16 caracteres.

 

web.xml

 

Não será necessário alterar o arquivo web.xml caso você tenha lido a terceira parte deste artigo, mas listarei ele novamente para quem não viu o artigo anterior, importante lembrar para quem ainda não tem experiência em desenvolvimento web, os arquivos web.xml e faces-config.xml devem ser criados na pasta WEB-INF do seu projeto.

 

<?xml version="1.0"?>   

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

         version="2.4">

    

  <servlet>

     <servlet-name>Faces Servlet</servlet-name>

     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

     <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

     <servlet-name>Faces Servlet</servlet-name>

     <url-pattern>*.faces</url-pattern>

  </servlet-mapping> 

  <welcome-file-list>

     <welcome-file>index.jsp</welcome-file>

     <welcome-file>index.html</welcome-file>

  </welcome-file-list>

</web-app>

 

Não será necessário alterar a classe ApostaBean2.java  localizada no  pacote br.nitewing.claudio.validacoes., ainda assim listarei ela para quem não leu a parte 3 deste artigo, sendo possível assim testar o exemplo sem depender do anterior.

 

package br.nitewing.claudio.validacoes;

 

public class ApostaBean2 {

 

  private String nome;

  private String cavalo;

  private double valorAposta;

  private int quantJogos;

 

  public String getNome() { return(nome); }

  public void setNome(String nome) {

    this.nome = nome;

  }

 

  public String getCavalo() { return(cavalo); }

  public void setCavalo(String cavalo) {

    this.cavalo = cavalo;

  }

 

  public double getValorAposta() { return(valorAposta); }

  public void setValorAposta(double valoraposta) {

    this.valorAposta = valoraposta;

  }

 

  public int getQuantJogos() { return(quantJogos); }

  public void setQuantJogos(int quantjogos) {

    this.quantJogos = quantjogos;

  }

  public String apostar() {

    return("sucesso");

  }

}

 

O Método apostar() devolve a String sucesso que faz com que o usuário seja redirecionado para a pagina de confirmação caso não exista erro no preenchimento dos campos do form.

 

No arquivo faces-config.xml adicionaremos uma nova <navigation-rule> conforme mostrado com destaque no código abaixo.

 

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE faces-config PUBLIC

  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"

  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

 

<faces-config>

  <managed-bean>

    <managed-bean-name>apostaBean2</managed-bean-name>

    <managed-bean-class>br.nitewing.claudio.validacoes.ApostaBean2

</managed-bean-class>

    <managed-bean-scope>request</managed-bean-scope>

  </managed-bean>

 

  <navigation-rule>

    <from-view-id>/aposta1.jsp</from-view-id>

    <navigation-case>

      <from-outcome>sucesso</from-outcome>

      <to-view-id>/WEB-INF/resultados/mostrarAposta1.jsp</to-view-id>

    </navigation-case>

  </navigation-rule>

 

  <navigation-rule>

    <from-view-id>/aposta2.jsp</from-view-id>

    <navigation-case>

      <from-outcome>sucesso</from-outcome>

      <to-view-id>/WEB-INF/resultados/mostrarAposta2.jsp</to-view-id>

    </navigation-case>

  </navigation-rule>   

 

</faces-config>

 

Altere o arquivo index.jsp para chamar desta vez aposta2.faces.

 

<% response.sendRedirect("aposta2.faces"); %>

 

 

aposta2.jsp

 

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<f:view>

     

      <HTML>

      <HEAD>

      <TITLE></TITLE>

      <style type="text/css">

.RED {

      font-weight: bold;

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
20/12/2007 02:36:00





Artigo - Métodos de validação em JSF - Parte III

Métodos de validação em JSF - Parte III

 

Validação Explícita

A Validação Explícita vem para evitar que ocorram os problemas existentes na validação manual onde a checagem dos campos é todo feita nas classes de negócio, tendo em vista que  casa seja mudada alguma regra de validação o desenvolvedor é forçado mexer no codigo fonte da aplicação e recompilar as classes.

 

Na Validação Explícita e na Validação Explícita Automática fazemos uso de validadores fornecidos pelo Java Server Faces ou simplesmente JSF como irei me referir de agora adiante.

 

Para implementar a Validação Explícita é necessário seguir os seguinte passos:

 

Definir as propriedades do bean com os tipos adequados. Ex: int/Integer, long/Long, double/Double, boolean/Boolean, etc.

 

Usar os campos id e required nas tags <h:inputtext> dos forms para que com isso todo campo que estiver vazio existente no momento da submissão de um form dispare uma mensagem de erro.

 

Deve usar a tag <h:message> para exibir as mensagens de erro. A tag <h:message>  aceita o  atributo styleClass para que possamos fazer uso de Folhas de Estilo (CSS).

 

Você pode e deve adicionar na tag  h:commandButton o atributo immediate para desviar da validação, é necessário desviar da validação pois a sua ou ausência ou caso esteja definido como false fará com que a pagina atual seja exibida novamente, o atributo immediate  é muito util quando a aplicação tem um botão logout, validação de senha ou cancelar operação.

 

Agora vamos a um exemplo completo:

 

web.xml

 

<?xml version="1.0"?>   

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

         version="2.4">

  <!-- Configuracao Faces Servlet -->

  <servlet>

     <servlet-name>Faces Servlet</servlet-name>

     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

     <load-on-startup>1</load-on-startup>

  </servlet>

  <!-- Mapeando o Faces Servlet para a extensao *.faces -->

  <servlet-mapping>

     <servlet-name>Faces Servlet</servlet-name>

     <url-pattern>*.faces</url-pattern>

  </servlet-mapping>

 

  <!-- Welcome files -->

  <welcome-file-list>

     <welcome-file>index.jsp</welcome-file>

     <welcome-file>index.html</welcome-file>

  </welcome-file-list>

</web-app>

 

Crie o pacote: br.nitewing.claudio.validacoes e nele crie o arquivo ApostaBean2.java.

 

package br.nitewing.claudio.validacoes;

 

public class ApostaBean2 {

 

  private String nome;

  private String cavalo;

  private double valorAposta;

  private int quantJogos;

 

// Metodos Getters e Setters

 

  public String getNome()

  { return(nome); }

  public void setNome(String nome) {

    this.nome = nome;

  }

 

  public String getCavalo()

  { return(cavalo); }

  public void setCavalo(String cavalo) {

    this.cavalo = cavalo;

  }

 

  public double getValorAposta()

  { return(valorAposta); }

  public void setValorAposta(double valoraposta) {

    this.valorAposta = valoraposta;

  }

 

  public int getQuantJogos()

  { return(quantJogos); }

  public void setQuantJogos(int quantjogos) {

    this.quantJogos = quantjogos;

  }

 

  public String apostar() {

    return("sucesso");

  }

}

 

O Método apostar() devolve a String sucesso que faz com que o usuário seja redirecionado para a pagina de confirmação caso não exista erro no preenchimento dos campos do form.

 

Em seguida vemos o código do Faces-config.xml aonde configuramos ApostaBean utlizando as tags : <managed-bean-name> e <managed-bean-class> que  são atributos da tag <managed-bean>.

 

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE faces-config PUBLIC

  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"

  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

 

<faces-config>

  <managed-bean>

    <managed-bean-name>apostaBean2</managed-bean-name>

    <managed-bean-class>br.nitewing.claudio.validacoes.ApostaBean2

</managed-bean-class>

    <managed-bean-scope>request</managed-bean-scope>

  </managed-bean>

 

  <navigation-rule>

    <from-view-id>/aposta1.jsp</from-view-id>

    <navigation-case>

      <from-outcome>sucesso</from-outcome>

      <to-view-id>/WEB-INF/resultados/mostrarAposta1.jsp</to-view-id>

    </navigation-case>

  </navigation-rule>

</faces-config>

 

No arquivo aposta1.jsp abaixo temos um form que servirá para entradas de dados digitado pelos apostadores.

 

aposta1.jsp

 

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

<f:view>

      <HTML>

      <HEAD>

      <TITLE>Apostas</TITLE>

      <style type=

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
20/12/2007 02:22:00





Artigo - Conhecendo as Classes Wrappers, Autoboxing e Auto-unboxing

Conhecendo as Classes Wrappers, Autoboxing e Auto-unboxing (Introdução)

 

Neste artigo falaremos sobre o uso de classes Wrappers , e dos recursos do java 5 de Autoboxing e Auto-unboxing.

 

 

Tabela de Tipos primitivos e Classes Wrappers

 

 

Tipo primitivo

Classe Wrapper

Subclasse

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
28/11/2007 21:54:00





Artigo - Formatando números com Numberformat

Formatando números com Numberformat

 

A classe  NumberFormat, faz parte do pacote java.text e permite formatar números conforme a localização geográfica em que você se encontra, realizando a distinção entre o sinal de ponto,milhar e de  decimal,  também identifica a posição do sinal do número e identifica o prefixo que indica a moeda em caso de valores monetários.

 

A Classe NumberFormat possui três mêtodos para formatar números, valores monetários e percentuais. Para fazer uso dela é necessário importa-la.

 

ex:

import java.text.NumberFormat;

 

Os principais métodos do NumberFormat são:

 

getNumberInstance()

Retorna a instância de um objeto com base no formato da localidade padrão. É utilizado para numeros

 

getCurrencyInstance()

Usado para formatar moedas

 

getIntegerInstance()

Usado para formatar números ignorando casas decimais

 

getPercentInstance()

Usado para formatar frações pro exemplo 0,15 é formatado e mostrado como 15%

 

Exemplo:

 

import java.text.NumberFormat;

 

public class Formata {

 

      public static void main(String[] args) {

           

            System.out.println(NumberFormat.getCurrencyInstance().format(12345678.90));

            // imprimirá R$ 12.345.678,90          

      }

}

 

Agora um exemplo para uma situação em que se há muitos números a serem formatados.

 

import java.text.NumberFormat;

 

public class Formata2 {

 

      public static void main(String[] args) {

            double n[]={523.34, 54344.23 ,95845.223 ,1084.895};

           

            NumberFormat z = NumberFormat.getCurrencyInstance();

           

            for (int a = 0; a < n.length; a++) {

                  if(a != 0)

                        System.out.print(", ");

                        System.out.print(z.format(n[a]));

            }

            System.out.println();

            /*

            Imprime:

            R$ 523,34, R$ 54.344,23, R$ 95.845,22, R$ 1.084,90

            */

      }    

}

 

Ainda é possível criar uma formatação personlizada utilizando o objeto DecimalFormat.

 

por exemplo:

 

import java.text.DecimalFormat;

 

public class Formata {

     

      public static void main(String[] args) {

           

            double valor = 2000.0;

            double vezes = 3.0;

            double prestacao = valor/vezes;

     

            DecimalFormat df = new DecimalFormat("0.##");

            String dx = df.format(prestacao);

           

            System.out.print(dx);

           

      }

      // sera impresso : 666,67

}

 

Algumas strings de formatação que podem ser utilizadas com o Decimal Format

 

Marcara de formatação

Formato impresso

Descrição

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
27/11/2007 17:18:00





Artigo - Java Server Faces: Métodos de Validação – Parte 2

Java Server Faces: Métodos de Validação – Parte 2

 

Continuando com nosso artigo sobre métodos de validação em JSF, vamos ver um exemplo de Validação Manual.

 

cvjsfmvp2fig01.jpg 

Figura-1

 

O código de nosso aplicativo  esta comentado, é um aplicativo bem simples que simula um aplicação de venda de Títulos de aplicação, ela não é um exemplo real, mas o seu objetivo é você entender como se ocorre a validação manual.

 

Primeiro crie um projeto web em sua IDE preferida, e vamos criar dois arquivos com extensão .jsp, chame o primeiro de index.jsp e o segundo de cap1,jsp como na Figura-1 mostrada anteriormente.

 

É importante lembrar que como estou usando eclipse, com os plugins Sysdeo para Tomcat, e Amateras HTML e Amateras Faces IDE, estrutura do projeto pode parecer estranha para usuários do WTP ou ainda para usuários do Netbeans, mas isso não chega a ser um problema, pois o exemplo funcionara se você tiver os  jars  do myfaces na sua aplicação no classpath da sua aplicação como mostrada  na Figura-2, não usamos o Tomahawk em nossa aplicação mas o plugin Amateras Faces adiciona tambem coloca ele na aplicação por padrão, no Eclipse você pode baixar o eclipse 1.1.5 que é a versão utiliza em nosso artigo ou uma mais nova, e colocar na pasta lib de sua aplicação,  caso esteja usando o eclipse com Exadel, Lomboz ou algum outro plugin é só pedir para adicionar JSF capabilities, já no Netbeans você pode escolher um projeto web e marcar o frame java server faces quando estiver criando um projeto web pois o código aqui apresentando é totalmente compatível com a especificação da Sun e não usamos componentes do Tomahawk.

 

cvjsfmvp2fig02.jpg 

Figura-2

 

código do index.jsp

 

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<title>Validação Manual</title>

</head>

<body>

<h1>Metódos de Validação</h1>

<a "cap1.jsf"> Validação Manual</a><br>

</body>

</html>

 

Agora crie o arquivo cap1.jsp:

 

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

<f:view>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

<TITLE>Exemplo de Validação Manual</TITLE>

 

<LINK REL="STYLESHEET"

      "./css/styles.css"

      TYPE="text/css">

</HEAD>

<BODY>

<CENTER>

<h1>Capitalização NossaCap</h1>

 

<h:form>

  <h:outputText value="#{capBean1.errorMessages}"

                escape="false"/>

  <TABLE width="350px">

  <TR>

    <TD>Nome Titular:

    </TD>

    <td align="right"><h:inputText value="#{capBean1.userID}"/></td>

    </TR>

 

    <TD>Valor Aplicado(R$):

    </TD>

    <td align="right"><h:inputText value="#{capBean1.bidAmount}"/></td>

    </TR>

  <TR>

    <TD>Vigência do Titulo:

    </TD>

    <td align="right"><h:inputText value="#{capBean1.bidDuration}"/></td>

    </TR>

  <TR><Td colspan="2" align="right">

      <h:commandButton value="Confirmar!"

                       action="#{capBean1.doCap}"/></Td></TR>  </TABLE>

</h:form>

</CENTER></BODY></HTML>

</f:view>

 

Agora vamos criar o Backbean CapBean1 que será responsável pela validação de campos submetidos pelo usuário.

 

CapBean.java

 

package validacoes;

//Essa classe faz parte do pacote validacoes

 

import java.util.ArrayList;

 

public class CapBean1 {

  private String userID = "";

  private String bidAmount;

  private double numericBidAmount = 0;

  private String bidDuration;

  private int numericBidDuration = 0;

/* As mensagens de erro serão armazenadas em um ArrayList

 * Observe que o nosso código é adaptado para o Java 5

 * podendo ser rodado sobre um JVM 1.4 com algumas adaptações

 * no código.

 */

  private ArrayList<String> errorMessages = new ArrayList<String>();

 

  // Agora definiremos o metódos get e Set do Managed Bean CapBean1.java

 

  public String getUserID() { return(userID); }

 

  public void setUserID(String userID) {

    this.userID = userID.trim();

  }

 

  public String getBidAmount() { return(bidAmount); }

 

  public void setBidAmount(String bidAmount) {

    this.bidAmount = bidAmount;

    /* é feita a conversão da String recebida e armazenada no objeto

     numericBidAmout que é do tipo double

     */

    try {

      numericBidAmount = Double.parseDouble(bidAmount);

    } catch(NumberFormatException nfe) {}

  }

 

  public double getNumericBidAmount() {

    return(numericBidAmount);

  }

 

  public String getBidDuration() { return(bidDuration); }

 

  public void setBidDuration(String bidDuration) {

    this.bidDuration = bidDuration;

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
23/10/2007 20:25:00





Artigo - Java Server Faces : Métodos de Validação (Introdução)

Java Server Faces: Métodos de Validação (Introdução)

 

Eu poderia iniciar logo falando sobre os métodos de validação do Java Server Faces (JSF) mas acho interessante responder ou pelo menos tentar esclarecer um pouco questões da orientação objeto e da  tecnologia Java Beans antes de colocarmos a mão na massa.

 

O que são JavaBeans  ?

JavaBeans são classes javas que seguem algumas convenções :

l  Devem possuir um construtor sem parâmetros , você pode satisfazer esse requerimento,  omitindo todos os métodos construtores de sua classe ou definindo o construtor sem a passagem de parâmetros.

l  Não podem possuir variáveis(campos)  públicos, em resumo não pode haver acesso direto ao campos, ao invés disso deve ser feito uso de métodos assessores.

l  A Persistência de dados deve ser feita através de métodos Getters e Setters, ou seja se a classe possuir um método getNome ela retornara uma String pois provavelmente o campo definido na classe sera do tipo String, em caso de valores do tipo Boleanos, é o utilizado a sintaxe isXxx  invés de getXxx.

 

ex:

Ao invés de declararmos:

 

      public double speed;

 

Devemos usar:

 

      // Declaramos o atributo speed como privado

      private double speed;

 

 

      // Método Get que irá retornar o valor do atributo speed

      public double getSpeed()

      {

      return speed);

      }    

 

      // Metódo set que irá armazenar em speed

      public void setSpeed(double newSpeed)

       {

      speed = newSpeed;

      }

 

Para informações sobre beans é aconselhável uma visita a : http://java.sun.com/beans/docs/

 

E o que são Construtores ?

Um método construtor é chamado sobre um objeto no momento em que este é criado, ao contrário de outros métodos ele não pode ser chamado diretamente, eles servem para definir valores iniciais para variáveis(atributos) de instância, eles sempre têm o mesmo nome da classe que fazem parte, não tem nenhum tipo de retorno, não fazem uso da instrução return.

 

ex:

      class Carro {

      // Atributos(varíaveis)

      String marca

      int ano

      //Método construtor

      Carro(String m, int a){

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
23/10/2007 20:12:00





Artigo - JSF – Usando arquivos de propriedades(Resource Bundle) para internacionalização de aplicativos

JSF – Usando arquivos de propriedades(Resource Bundle) para internacionalização de aplicativos

 

Este artigo tem como objetivo mostrar o uso de arquivos .properties (os Resources Bundles), eles servem pra inúmeras coisas, mas nesse artigo iremos dar um enfoque maior em seu uso para internacionalização de aplicações em JSF.

 

index.jsp

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

   "http://www.w3.org/TR/html4/loose.dtd">

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>JSF - Usando Properties Files</title>

    </head>

    <body>

    <h1>JSF - Usando Properties Files</h1>

    <br/>

    <li><a "./simples.jsf">Exemplo Mensagens Simples</a></li>

    <li><a "./parametros.jsf">Exemplo Mensagens Parametrizadas</a></li>

    <li><a "./parametros.jsf">Internacionalização</a></li>

</body>

</html>

 

simples.jsp

<%@page contentType="text/html"%>

<%@page pageEncoding="UTF-8"%>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>

<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>Mensagens Simples</title>

    </head>

    <body>

        <f:view>

            <h1>JSF - Usando Properties Files</h1>

            <f:loadBundle basename="recursos.mensagens" var="msgs"/>

            <h2><h:outputText value="#{msgs.title}"/></h2>

            <BR>

            <h:outputText value="#{msgs.text}"/>

            <P>

            <h:form>

                <table border="0" cellspacing="2" cellpadding="2">

                    <tbody>

                        <tr>

                            <td> <h:outputText value="#{msgs.firstNamePrompt}"/>:</td>

                            <td><h:inputText /></td>

                        </tr>

                        <tr>

                            <td><h:outputText value="#{msgs.lastNamePrompt}"/>:</td>

                            <td> <h:inputText /></td>

                        </tr>

                        <tr>

                            <td><h:outputText value="#{msgs.emailAddressPrompt}"/>:</td>

                            <td><h:inputText /></td>

                        </tr>

                        <tr>

                            <td><h:commandButton

                                value="#{msgs.buttonLabel}"/></td>

                            <td></td>

                        </tr>

                    </tbody>

                </table>               

            </h:form>

        </f:view>

    </body>

</html>

 

Altere o contéudo do arquivo web.xml acrescentando as seguintes linhas:

 

<servlet>

        <servlet-name>Faces Servlet</servlet-name>

        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

        <load-on-startup>1</load-on-startup>

        </servlet>

    <servlet-mapping>

        <servlet-name>Faces Servlet</servlet-name>

        <url-pattern>*.jsf</url-pattern>

 </servlet-mapping>

<welcome-file-list>

      <welcome-file>

            index.jsp

        </welcome-file>

</welcome-file-list>

 

Agora vamos criar um pacote chamado recursos e dentro do pacote recursos vamos criar um arquivo com extensão .properties, vamos chama-lo de mensagens.properties.

 

E nele adicionaremos o seguinte conteúdo:

 

title=Inscrição para Workshop

text=Por favor insira o seu nome e sobrenome e email.

firstNamePrompt=Nome

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
18/09/2007 22:19:00





Artigo - Navegação Estática e Dinâmica com JSF - Parte II

Navegação Estática e Dinâmica com JSF - Parte II

 

No artigo anterior começamos a utilizar Java Server Faces, mas não chegamos a usar nenhuma classe java, o nosso próximo exemplo utiliza um Action Controller, mas em artigos futuros usaremos exemplos mais realistas, por enquanto vamos dar continuidade o que começamos no artigo anterior.

 

cvnedjsfp2fig01.jpg 

Figura 1

 

A Figura1 mostra o funcionamento de nossa aplicação:

 

Atualize seu faces-config.xml com o conteúdo abaixo:

 

<?xml version="1.0"?>

<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>

<navigation-rule>

                        <from-view-id>/registrar1.jsp</from-view-id>

            <navigation-case>

                        <from-outcome>registrar</from-outcome>

                        <to-view-id>/WEB-INF/respostas/resultado1.jsp</to-view-id>

            </navigation-case>

</navigation-rule>

<navigation-rule>

            <from-view-id>/registrar2.jsp</from-view-id>

<navigation-case>

            <from-outcome>aceito</from-outcome>

            <to-view-id>/WEB-INF/respostas/aceito.jsp</to-view-id>

</navigation-case>

<navigation-case>

            <from-outcome>rejeitado</from-outcome>

            <to-view-id>/WEB-INF/respostas/rejeitado.jsp</to-view-id>

</navigation-case>

</navigation-rule>

            <managed-bean>

                        <managed-bean-name>PlanoSaudeController</managed-bean-name>

                        <managed-bean-class>navegacao.PlanoSaudeController</managed-bean-class>

                        <managed-bean-scope>request</managed-bean-scope>

            </managed-bean>

</faces-config>

 

Atualize também o arquivo web.xml:

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

    version="2.4">

  <display-name>MyFaces Application</display-name>

  <!-- servlet -->

  <servlet>

    <servlet-name>FacesServlet</servlet-name>

    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

  </servlet>

  <!-- servlet-mapping -->

   <servlet-mapping>

    <servlet-name>FacesServlet</servlet-name>

    <url-pattern>*.faces</url-pattern>

  </servlet-mapping>

  <!-- The Usual Welcome File List -->

    <welcome-file-list>

      <welcome-file>index.jsp</welcome-file>

    </welcome-file-list>

   

<security-constraint>

<display-name>

Bloqueio  a acesso direto as paginas JSP.

</display-name>

<web-resource-collection>

<web-resource-name>Raw-JSF-JSP-Pages</web-resource-name>

<!-- Add url-pattern for EACH raw JSP page -->

<url-pattern>/welcome.jsp</url-pattern>

<url-pattern>/registrar1.jsp</url-pattern>

<url-pattern>/registrar2.jsp</url-pattern>

</web-resource-collection>

<auth-constraint>

<description>Sem regras, Apenas bloqueio  acesso direto</description>

</auth-constraint>

</security-constraint>

</web-app>

 

Crie o arquivo registrar2.jsp:

 

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html>

            <head>

                        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

                        <title>Plano de Saude JM</title>

            </head>

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
20/08/2007 14:44:00





Artigo - Navegação estática e dinâmica com JSF – Parte I

Navegação estática e dinâmica com JSF Parte I

 

JSF(ou Java Server Faces) é uma tecnologia que incorpora características de um framework MVC para WEB e também as de um modelo de interfaces gráficas baseado em eventos. Por basear-se no padrão de projeto MVC, uma de suas melhores vantagens é a clara separação entre a visualização e regras de negócio (modelo).

 

O controller é composto pelo FacesServlet por arquivos de configuração e por um conjunto de manipuladores de ações e observadores de eventos.

 

O FacesServlet é responsável por receber requisições da WEB, redirecioná-las para o modelo e então remeter uma resposta

 

Os arquivos de configuração são responsáveis por realizar associações e mapeamentos de ações e pela definição de regras de navegação.

 

Os manipuladores de eventos são responsáveis por receber os dados vindos da camada de visualização, acessar o modelo, e então devolver o resultado para o FacesServlet

 

O modelo representa os objetos de negócio e executa uma lógica de negócio ao receber os dados vindos da camada de visualização.

 

A visualização é composta por component trees (hierarquia de componentes UI), tornando possível unir um componente ao outro para formar interfaces mais complexas.

 

Após essa breve introdução do que é o Java Server Faces, vamos agora criar um exemplo bem simples com pra demonstrar o uso do mesmo.

 

Aplicação de exemplo esta dividida em duas partes e embora não seja uma aplicação real, o exemplo permite ter uma noção de alguns recursos do  JSF, outros serão explorados em outros tutoriais.

 

Nessa primeira etapa veremos um exemplo de navegação estática com JSF:

 

Nossa aplicação será composta de dois formulários, o segundo formulário que ao ser submetido, terá um Bean  é instanciado e um método action controller  invocado, retornando então uma condição que resultara em uma resposta que será mostrada ao usuário.

 

cvnedjsfp1fig01.jpg 

 

Primeiro vamos configurar o arquivo faces-config.xml

 

<?xml version="1.0"?>

<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

 

<faces-config>

<navigation-rule>

            <from-view-id>/registrar1.jsp</from-view-id>

      <navigation-case>

            <from-outcome>registrar</from-outcome>

            <to-view-id>/WEB-INF/respostas/resultado1.jsp</to-view-id>

      </navigation-case>

</navigation-rule>

</faces-config>

 

Agora crie um arquivo .jsp de nome index.jsp:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Registrar</title>

</head>

<body>

<a "registrar1.faces">Registrar1 - Exemplo de Navegação Estática</a><br>

<a "registrar2.faces">Registrar2 - Exemplo de Navegação Dinâmica</a>

</body>

</html>

 

registrar1.jsp

 

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

 

<html>

      <head>

            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

            <title></title>

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
19/08/2007 16:04:00





Artigo - Desenvolvendo um cadastro simples com Struts

Desenvolvendo um cadastro simples com Struts

 

Embora o Struts 2 ofereça uma quantidade enorme de recursos, muitas empresas ainda usam o Struts 1.2.x ou 1.3.x, neste artigo veremos um exemplo bem simples de Struts, bem básico mesmo.

 

Agora iremos criar um arquivo index.jsp ao qual teremos links para os exemplos que nós veremos em nossas próximos artigos.

 

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>Exemplos com Struts</title>

    </head>

    <body>

    <div align="center">

    <h1>Indice de Exemplos<br> com Struts 1.2.x</h1>

   

    <ol>

        <li><a "Registro1.jsp">Exemplo 1</a></li>

        <li>Exemplo2</li>

    </ol> 

    </div>

    </body>   

</html>

 

Edite o arquivo web.xml  para se parecer com o mostrado abaixo:

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <servlet>

        <servlet-name>action</servlet-name>

        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

        <init-param>

            <param-name>config</param-name>

            <param-value>/WEB-INF/struts-config.xml</param-value>

        </init-param>

        <init-param>

            <param-name>debug</param-name>

            <param-value>2</param-value>

        </init-param>

        <init-param>

            <param-name>detail</param-name>

            <param-value>2</param-value>

        </init-param>

        <load-on-startup>2</load-on-startup>

        </servlet>

    <servlet-mapping>

        <servlet-name>action</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

    <session-config>

        <session-timeout>

            30

        </session-timeout>

    </session-config>

    <welcome-file-list>

      <welcome-file>index.jsp</welcome-file>

        </welcome-file-list>

    </web-app>

 

Em strutsaula/web crie o arquivo Registro1.jsp :

 

<html>

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
19/08/2007 15:46:00





Artigo - Como usar coleções - Parte V – Final

Como usar coleções - Parte V – Final

 

Estamos chegando ao final de nossa série de artigos sobre Coleções do Java. Nessa última parte falaremos um pouco sobre Map.

 

Usando Mapas

Mapas (também chamados de arrays associativos) de objetos são mais uma das formas de organizarmos coleções de objetos, apesar de se parecerem com arrays de objetos, seus índices não precisam necessariamente ser valores inteiros positivos seqüênciais, por isso podem ser instâncias de uma classe qualquer, simplificando: Mapas são conjuntos de pares de objetos, sendo um chamado chave e o outro, valor.

 

Mapas permitem valores iguais, porém, não permitem chaves repetidas, é importante lembrar que chaves diferentes podem ser ou estarem associadas a valores iguais.

 

No Java as interfaces e classes que implementam Mapas não herdam da interface Collection, mas mesmo assim é possível de forma separada acessar e manipular chaves e valores de mapas como se estes fossem coleções.

 

Os métodos que podem ser aplicados a um mapa são definidos pela interface Map, esses métodos são implementados por duas classes HashMap e TreeMap.

 

cvqucp6fig01.jpg 

Figura 1 – Exemplo de HashMap

 

A seguir um exemplo do uso de Map:

Crie o arquivo DIPs.java.

// Importando as bibliotecas necessárias

import java.io.IOException;

import java.util.*;

import java.io.BufferedReader;

import java.io.InputStreamReader;

/**

 *

 * @author claudio

 */

public class DIPs {

    public DIPs() {

      //Metdp construtor

    }

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
23/07/2007 17:32:00





Artigo - Quando Usar Coleções - Parte IV

Quando Usar Coleções - Parte IV

 

Os objetos do grupo Set têm o objetivo de não permitir a duplicação de elementos. Estes objetos tratam os elementos como se fossem parte de um conjunto matemático, no qual independente da ordem em que elementos são acrescentados eles nunca serão duplicados.

 

Conjuntos são extensamente usados pra representação de dados. Com base nisso podemos dizer que  uma turma pode ser considerada um conjunto de alunos, uma aplicação java pode ser considerada um conjunto de classes java, e daí por diante.

 

Como vimos na escola, conjuntos podem ser vazios, mas não infinitos, visto que sua representação seria impossível. O tamanho de um conjunto pode variar dinamicamente, não sendo necessário prover seu tamanho, alem disso objetos em conjunto geralmente não são ordenados explicitamente, assim sendo a ordem que foi inseridos não é mantida internamente.

 

Conjuntos em Java são encapsulados por uma instância de uma das classes que implementam Set. Esta por sua vez declara vários métodos que possibilitam a inclusão e remoção de objetos na coleção, além de também permitirem a verificação do tamanho do conjunto (isto é quantos elementos ele contém), dentre outros.

 

Duas Classes implementam Set diretamente, são elas :

HashSet e TreeSet

 

HashSet –  Através de um mecanismo interno reduz o elemento a um número, e com base nele, realiza uma pesquisa em um sublista de elementos contendo esse mesmo número, é mais rápido que o TreeSet para as operações de modificação do conjunto e não estabelece nenhuma ordem particular entre os objetos.

 

cvqucp4fig01.jpg 

 

TreeSet – Preserva a ordem natural dos elementos, porem ocorre uma perda de performance na inserção e deleção TreeSet utiliza-se de uma árvore Binária para alinhar os elementos. Esse tipo de abordagem se mostra bastante eficiente para procurar elementos, esta abordagem consta em se varrer uma árvore balanceada, contudo se ponto fraco reside justamente no balanceamento da árvore, que pode gerar lentidão a depender da quantidade de elementos existentes.

 

cvqucp4fig02.jpg 

 

Exemplo do uso de HashSet()

 

package colecoes;

//Exemplo01 HashSet

import java.util.HashSet;

 

public class ExemploSet {

            public static void main(String[] args) {

                        // TODO Auto-generated method stub

                        HashSet<String> set  = new HashSet<String>();

                        set.add("Dinardo");

                        set.add("Rosa");

                        set.add("Dinardo");

                        set.add("Rafael");

                        set.add("Luís");

                        set.add("Rafael");

                        set.add("Jobson");

                        set.add("Anderson");

                        set.add("Rosa");

                        System.out.println(set);

            }

}

 

O Resultado desse código é mostrado a seguir:

 

[Jobson, Rafael, Rosa, Anderson, Luis, Dinardo]

 

Observe que embora houvessem elementos duplicados, quando imprimimos o objeto set, não foi mostrado nem dos elementos duplicados.

 

package colecoes;

 

//Exemplo01 HashSet e TreeSet

import java.util.HashSet;

import java.util.Set;

import java.util.TreeSet;

 

public class Ordenado {

            public static void main(String[] args) {

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
20/06/2007 09:39:00





Artigo - Utilizando recursos do Java para formatação de datas

Utilizando recursos do Java para formatação de datas

 

Para formatarmos elementos de uma data é necessário o uso do DateFormat, podemos com ela definir  a forma como queremos que seja exibido uma determinada data, por exemplo: “dia/mês/ano” ou “ano-mês-dia”, podemos também converter uma data para texto e vice versa independente da posição geográfica, Internamente DateFormat o número de milissegundos decorridos desde 01/01/1900.

 

A Classe DateFormat não traz métodos adequados para conversão para texto, mas isso pode ser sanado com o uso de SimpleDateFormat.

 

Veja exemplos abaixo:

 

package javaapplication1;

 

import java.text.DateFormat;

import java.util.Date;

 

/**

 * @author claudios

 */

public class Main {

 

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // Imprime a data no formato Padrão

        System.out.println(DateFormat.getDateInstance().format(new Date()));                     

    }

}

 

package javaapplication1;

 

import java.text.DateFormat;

import java.util.Date;

 

/**

 * @author claudios

 */

public class Main {

 

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

         // Imprime a data no formato curto

        System.out.println(DateFormat.getDateInstance(DateFormat.SHORT).format(new Date()));

  

       

    }

 

}

 

package javaapplication1;

 

import java.text.DateFormat;

import java.util.Date;

 

/**

 * @author claudios

 */

public class Main {

 

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // Imprime a data no formato medio

        System.out.println(DateFormat.getDateInstance(DateFormat.MEDIUM).format(new Date()));       

    }

 

}

 

package javaapplication1;

 

import java.text.DateFormat;

import java.util.Date;

 

/**

 * @author claudios

 */

public class Main {

 

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // Imprime  a data no formato longo

        System.out.println(DateFormat.getDateInstance(DateFormat.LONG).format(new Date()));

    }

 

}

 

package javaapplication1;

 

import java.text.DateFormat;

import java.util.Date;

 

/**

 * @author claudios

 */

public class Main {

 

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // Imprime a data no formato completo

        System.out.println(DateFormat.getDateInstance(DateFormat.FULL).format(new Date()));

    }

 

}

 

O Resultado deveram se parecer com os que são mostrados abaixo :

 

         * 31/05/2007

         * 31/05/07

         * 31/05/2007

         * 31 de Maio de 2007

         * Quinta-feira, 31 de Maio de 2007

 

Formatação Personalizada

A classe SimpleDateFormat possibilita que você possa fornecer uma String de formatação para  data/hora com letras que tem signifados especiais como mostra a Tabela-1.

 

Símbolo

Significado

Exemplo

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
20/06/2007 09:21:00





Artigo - Quando usar Coleções - Parte III

Quando usar Coleções - Parte III

 

Antes de começarmos a falar sobre Iterators, vamos relembrar o conceito de Lista de Objetos.

 

Listas de Objetos são coleções onde elementos repetidos podem ocorrer e onde os elementos têm posições definidas, para simplificar, podemos afirmar que listas são como arrays com características adicionais, sendo que destas a que mais merece destaque é a capacidade de seu tamanho a ser modificado de acordo com a necessidade.

 

Já havia sido comentado no artigo anterior que a interface List declara métodos que podem ser usados para manipular listas e também sobre a existência de duas classes que implementam a interface List: ArrayList e LinkedList. Também comparamos as vantagens e desvantagens destas duas classes.

 

Após essa recapitulação vamos agora falar sobre Iterators.

 

Iterators

Quando usar Iterators ?

 

Há ocasiões (e não são poucas) em que precisamos que nosso programa percorra um a um os elementos que estão dentro de um objeto de coleção.

 

Uma boa solução para resolver essa situação é criar uma variável que varra o conjunto de elementos, montar um índice variando do primeiro elemento até o último.

 

Com isso em vez de escrever:

 

import java.util.ArrayList;

 

public class Lista3 {  

      public static void main(String[] args) {

            ArrayList lista2 = new ArrayList();

            lista2.add("Dinardo");

            lista2.add("Rosa");

            lista2.add("Rafa");

            lista2.add("Anderson");

            lista2.add("Alex");         

            for (int i = 0; i < lista2.size(); i++) {

                  System.out.println(lista2.get(i));

            }

      }

}

 

Com o uso de iterators  o código ficaria assim:

 

package javaapplication1teste;

 

import java.util.ArrayList;

import java.util.Iterator;

 

public class Lista3 {  

      public static void main(String[] args) {

            ArrayList lista2 = new ArrayList();

            lista2.add("Dinardo");

            lista2.add("Rosa");

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
30/05/2007 15:06:00





Artigo - Quando usar Collections - Parte II

Quando usar Collections - Parte II

 

No Artigo anterior eu prometia que iríamos explorar o grupo List, mas, antes de começar a falar sobre Listas de Objetos, é importante que se saiba quais são os principais métodos da Classe Collection e da interface Map.

 

Os Principais métodos da Classe Collection

Add(Object objeto) - Adiciona a coleção a um determinado objeto

 

addAll(Collection outraCollection) – Adiciona todos elementos de outra coleção.

 

clear() - Limpa todos os elementos de uma coleção.

 

contains(Object objeto) – Retorna true se o objeto já fizer parte da coleção.

 

containsAll(Collection outraCollection) – Retorna true caso todos os elementos de outra coleção estiverem presentes em determinada coleção.

 

hashcode() - Retorna o hashcode do objeto.

 

iterator() - Retorna o objeto de iteração com os elementos desta coleção.

 

remove(Object objeto) – Remove o objeto da coleção

 

removeAll(Collection outraCollection) – Remove todos os elementos que pertençam  à coleção corrente e á outra coleção determinada.

 

retainAll(Collection outraCollection) – Remove todos os elementos que não façam parte da coleção corrente e da outra coleção.

 

Size() - Retorna   a quantidade elementos existentes na coleção.

 

toArray() - Retorna  uma matriz de objetos(Object[]) dos elementos que estão contidos na coleção.

 

toArray([]matriz) – Retorna uma matriz do fornecido e, se a a matriz contiver a quantidade de elementos suficiente, passa a ser utilizada para armazenamento.

 

Os principais métodos da interface Map

clear() - Limpa todos os elementos do mapa.

 

containsKeys(Object Key) – Verifica se a chave faz parte do mapa.

 

containsValue(Object value) – Verifica se o valor faz parte do mapa.

 

EntrySet() - Retorna um conjunto do tipo (Set) contendo as chaves do mapa.

 

get(Object key)  - Retorna o valor baseado em uma chave.

 

put(Object Key,Object value) – Coloca a chave com base em valor.

 

putAll(Map outroMapa) – Coloca todos os elementos de outroMapa no mapa corrente.

 

remove(Object key) – Remove o elemento com a chave fornecida.

 

Size() - Retorna   a quantidade de elementos existentes no mapa.

 

Value() - Retorna uma coleção com os elementos do mapa.

 

As coleções estão dividas em três grandes grupos: List, Set e Map

Falaremos primeiro sobre o grupo List (Lista de Objetos)

 

A Finalidade do grupo List é gerenciar um grupo de elementos em sequência, muito semelhante a uma matriz, porem com a diferença de que, quando usamos uma classe do grupo List, a quantidade de elementos são modificadas dinamicamente.

 

Listas de Objetos são coleções onde os elementos podem se repetidos podem ocorrer e onde todos tem uma posição definida, a implementação de listas em java é muito semelhante a de Conjuntos (veremos nos próximos artigos).

 

Novo Java existe a interface List, esta declara quais metódos podem ser utilizados pelas classes ArrayList e LinkedList para manipular listas, essas classes possuem mecanismos distintos para representação interna dos objetos da Lista.

 

Na Figura1 e Figura 2 ilustramos o funcionamento das classes: ArrayList e LinkedList:

 

cvcollp2fig01.jpg
Figura 1


cvcollp2fig02.jpg

Figura 2

 

ArrayList implementa internamente uma lista como um array e tem um performance melhor, porém não é eficiente em situações que envolvam a inserção e deleção de elementos na lista. Enquanto que com o LinkedList ocorre justamento o inverso, sendo mas lenta para acesso sequencial a elementos da lista.

 

 Veja o código abaixo:

 

public class Lista {

 

      public static void main (String args[]) {

            String pessoas[] = new String[4];

            pessoas[0] = "Dinardo";

            pessoas[1] = "Rosa";

            pessoas[2] = "Rafael";

            pessoas[3] = "Alex";

            for(int i=0; i < pessoas.length

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
21/04/2007 23:47:00





Artigo - Quando usar Java Collections - Parte I

Quando usar Java Collections - Parte I

 

Em primeiro lugar o que é uma coleção?

 

Em Programação orientada a objetos, é comum trabalharmos não apenas com um objeto, mas sim com um conjunto deles. Com base nisso fica clara que uma collection é um objeto que agrupa múltiplos elementos (variáveis primitivas ou objetos) dentro de uma única unidade, devido a isso uma coleção também pode ser denominada como um container.

 

Ok, mas isso serve para que?

 

Coleções são usadas para armazenar, recuperar e manipular dados, assim como facilitar a transmissão de dados de um método para outro.

 

Tem um exemplo disso?

 

Geralmente coleções representam itens de dados que formam no geral um grupo.

 

Ex: Uma agenda telefônica contém uma coleção de números e nomes de telefones.

 

Antes do Java 1.2 existiam (ainda existem :-)) as seguintes classes:

·         Vector

·         Stack

·         Hashtable

·         Array

·         BitSet

 

A partir do Java 1.2 foi introduzido o Java Collections Frameworks, uma arquitetura unificada para fornecer uma manipulação mais eficiente de coleções de objetos, através de interfaces, algoritmos e implementações. Essas classes e interfaces estão localizadas no pacote java.util.

 

Collections disponibiliza componentes reutilizáveis, tais como:

·         Listas

·

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
10/04/2007 00:23:00





Artigo - Criando um Systray Multiplataforma com Java 6.0

Criando um Systray Multiplataforma com Java 6.0

 

Neste artigo iremos explorar alguns dos recursos das classes SystemTray e TrayIcon do Java 6 para com isso criarmos uma System Tray multiplataforma, para usarmos em nossas aplicações desktop, as classes SystemTray e TrayIcon fazem parte do pacote java.awt e juntas possibilitam a criação de um Tray com recursos tais como : imagens, popups,menus,submenus e itens de notificações.

 

No código descrito nesse artigo nós abordamos a maioria dos recursos dessas classes, para não ficar muito extenso, o código esta todo comentado.

 

A Figura 01 apresenta a aparência de nosso Tray.

 

cvsystrayfig01.jpg

Figura 01. Tray em execução.

 

//Importando as bibliotecas necessárias

import java.awt.AWTException;

import java.awt.CheckboxMenuItem;

import java.awt.Image;

import java.awt.MenuItem;

import java.awt.PopupMenu;

import java.awt.SystemTray;

import java.awt.Toolkit;

import java.awt.TrayIcon;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import javax.swing.JOptionPane;

 

public class Main {

   

    public static void main(String[] args) {

       

    final TrayIcon trayIcon; // declarando uma constante do tipo TrayIcon

 

    // Aqui vamos testar se o recurso é suportado

    if (SystemTray.isSupported()) {

   

    //declarando uma variavel  do tipo SystemTray

    SystemTray tray = SystemTray.getSystemTray();

   

    //declarando uma variavel  do tipo Image que contera a imagem tray.gif

    Image image = Toolkit.getDefaultToolkit().getImage("tray.gif");

   

   

     //Criamos um listener para escutar os eventos de mouse

      

    MouseListener mouseListener = new MouseListener() {

               

        public void mouseClicked(MouseEvent e) {

            

        }

 

        public void mouseEntered(MouseEvent e) {

           

        }

 

        public void mouseExited(MouseEvent e) {

           

        }

 

        public void mousePressed(MouseEvent e) {           

           

        //Toda vez que for clicado imprime uma mensagem na tela

            System.out.println("Tray Icon - O Mouse foi pressionado!");                       

        }

 

        public void mouseReleased(MouseEvent e) {

           

        }

    };

 

    // Criamos um ActionListener para a ação de encerramento do programa.

    ActionListener exitListener = new ActionListener() {

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
08/03/2007 08:47:00





Artigo - Criando Digramas de Classe usando o plugin Amateras UML no Eclipse

Criando Digramas de Classe usando o plugin Amateras UML no Eclipse

 

O Amateras UML é um plugin open source, regido pela Eclipse Public License -v 1.0, simples e leve que exige apenas ter o GEF instalado. Ele gera Diagramas de Classe, Casos de Uso e Diagramas de Seqüência. Os diagramas criados podem ser impressos ou ainda salvos no formato de imagem .jpeg e exportados para código fonte  java.

 

amaterasumlfig01.jpg

Figura 01 – Tela inicial do Programa

 

O Amateras pode ser baixado em:

 

http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=AmaterasUML

 

Instalando o plugin Amateras UML

A Instalação do plugin é bastante simples basta descompactar o arquivo AmaterasUML.x.x.x.zip no diretório plugins do Eclipse, entretanto é importante avisar que o Amateras UML deve ser baixado e instalado o GEF disponível em : http://www.eclipse.org/gef .

 

Criando um Diagrama de Classes

A primeira coisa a se fazer é criar um projeto java no Eclipse.

 

File >> New >> Java Project

 

Vamos dar a ele o nome de “transportadora”.

 

Em seguida vamos criar uma pasta no nosso projeto.

 

File >> new  >> Folder

 

Chame essa pasta de “Diagrama” ou qualquer outro nome que desejar.

 

Em seguida clique na pasta Diagrama e com o botão direito do mouse escolha:

 

New >> Other >> Amateras UML >> Class Diagram

 

Salve como: Exemplo.cld

 

Para criar a nossa primeira classe, a classe Cliente, clique na opção entity e escolha o item Class. Clicando nele e clicando na área cinza, será criada uma classe de nome class1, um duplo clique no nome da classe permite que ela seja renomeada.

 

Antes de inserirmos os atributos e métodos, clique com o botão do mouse sobre a classe e escolha opção Open Property View, com isso teremos disponível para nós uma barra de propriedades.

 

Para inserir os atributos na classe clicamos novamente da classe Cliente e escolhemos o item Add Atribute, para adicionar um método clicamos na opção Add Operation.

 

Vamos Criar duas classes, de acordo com a Figura 2:

 

amaterasumlfig02.jpg

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
01/02/2007 15:22:00





Artigo - Criando interfaces Swing com o GuiGeanie 1.0

Criando interfaces Swing com o GuiGeanie 1.0

 

A criação de interfaces para aplicações desktop em java costumam ser trabalhosas, para muitos pouco produtiva, apesar de IDE’s  com recursos  poderosos como o Netbeans, JBuilder, JDeveloper ou mesmo o plugin VE do Eclipse, há uma parcela de usuários iniciantes que nem sempre tem um equipamento a altura de idéias tão cheias de recursos, pensando em gerar alguma produtividade, consumindo muito pouco recurso de sistema existem softwares como o GuiGenie(www.guigenie.cjb.net) e o Cafeteira do Brasileiro Fernando Anselmo.

 

O GuiGenie possibilita a criação de componentes Swing de forma simples, gera um código comentado, um preview de como a tela ficará e salva a classe como um arquivo .java, além de fornecer a possibilidade de salvar o projeto criado nele.

 

Para usar o GuiGenie o primeiro a coisa é baixa-lo no endereço : www.guigenie.cjb.net

 

Existe uma versão multiplataforma e um instalador pra Windows.

 

Se você baixou a versão multiplataforma descompacte o arquivo e entre na pasta desejada, você poderá acessar o programa dando um duplo click no arquivo .jar do GuiGenie  se estiver no Windows ou via prompt do DOS ou Terminal do Linux utilizando um comando :

 

java –jar GuiGenie.jar

 

E será mostrada a seguinte tela conforme a Figura 1.

 

guigenie1.jpg

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
25/01/2007 16:07:00





 

Cláudio Santos das Virgens (claudiosvirgens@gmail.com),Analista de sistemas, Especialista em Engenharia de Software e Processos na Faculdade Ruy Barbosa,Tecnologo Gestão de Redes de Computadores da Unifacs.
Arquivo de atualizações
 2008
 2007

Estatísticas do Autor:
Número de posts: 21
Características dos posts deste autor:
Conteúdo:
Utilidade:
102 16
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group