Formatação de Data, CEP, CNPJ, Telefone - Help

olá pessoal!

estou precisando de uma ajudinha.

estou implementando minhas classes VO, onde estão criados os métodos setter e getter,
e preciso criar padronização para formatação de determinados métodos, como por exemplo,
para data, CEP, CENPJ, telefone.

estou trabalhando com a arquitetura: Flex + BlazeDS + Spring + Hibernate.

para o método setDataNascimento, implementeu a seguinte ideia:

[code]public void setDataNascimento(Date dataNascimento) {
DateFormat dtNascimento = new SimpleDateFormat(“dd/MM/yy”);
Date data = null;
try {
data = dtNascimento.parse(dataNascimento.toString());
} catch (ParseException e) {
e.printStackTrace();
}
this.dataNascimento = data;

}[/code]

porém não funcionou…

ao carregar o método ele dá o seguinte erro:

[BlazeDS] [ERROR] [Message.Remoting] Error processing remote invocation: org.springframework.orm.hibernate3.HibernateSystemException: Exception occurred inside setter of “nome da classe”; nested exception is org.hibernate.PropertyAccessException: Exception occurred inside setter of “nome da classe”.

se alguém puder ajudar, desde já agradeço!

[quote] 1. public void setDataNascimento(Date dataNascimento) {
2. DateFormat dtNascimento = new SimpleDateFormat(“dd/MM/yy”);
3. Date data = null;
4. try {
5. data = dtNascimento.parse(dataNascimento.toString());
6. } catch (ParseException e) {
7. e.printStackTrace();
8. }
9. this.dataNascimento = data;
10.
11. } [/quote]

não entendi muito o que você quis fazer aí, mas voce pode usar da seguinte maneira:

public void setDataNascimento(Date dataNascimento) {    
         this.dataNascimento = dataNascimento;  
}

e quando precisar imprimir/mostrar o valor

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yy");
System.out.println(formato.format(getDataNascimento()));

entendi o que você fez!
e já ate implementei, mas o que eu estou tentando criar é uma forma que ao invocar o
método getter ele já me retorne já formatado!

[code]public Date getDataNascimento() {

	SimpleDateFormat dtNascimento = new SimpleDateFormat("dd/MM/yy");
	dtNascimento.format(this.dataNascimento);
	return this.dataNascimento;
}[/code]

mas ainda não está funcionando! :thumbdown:

O que acontece é que está ocorrendo uma outra exeção ao formatar a data (como por exemplo, se dataNascimento estiver nulo). Tente debugar o código e ver se está lançando alguma outra exceção.

Bem … o que você quer então é a String formatada que o método format da classe SimpleDateFormat retorna.
Logo seu get teria que retornar uma String e não um objeto Date:

[code]public String getDataNascimento() {

    SimpleDateFormat dtNascimento = new SimpleDateFormat("dd/MM/yy");  
    return dtNascimento.format(this.dataNascimento);
}  

[/code]

Apesar que creio que seja mais recomendado o getDataNascimento normal, retornando o objeto Date, e um método novo como “getDataFormatada” para retornar a string de uma data qualquer formatada.

então pessoal, obrigado pela força!

mas meu método deve retornar um objeto do tipo Date mesmo, pois Uma data,
como qualquer outra abstração, deve ser mantida no formato normal (i.e. java.util.Date) aé o momento de ser exibida.
Já vi gente se equivocando de ficar tratando data como String até a hora que precisa calcular algo.

apesar de eu fazer o tratamento para formatar um objeto Date em uma String e depois transformar
essa String para um Date, ela perde a formatação passada.

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); System.out.println( formatter.format(this.dataNascimento) ); System.out.println( this.dataNascimento ); return new Date( formatter.format(this.dataNascimento) );

a equipe por aqui decidiu que essa formatação ficará melhor no ActionScript no Flex.

mas valeu pela ajuda!

murilo, o que os amigos estão tentando dizer é que você está fazendo uma confusão muito comum.

Algumas pensam, por exemplo, que precisam formatar seu objeto Date para o formato guardado pelo seu SGBD antes de persistir.

Em java, as classes formatadoras, não alteram o objeto fonte, eles apenas usam-no para extrair seus valores numa string formatada conforme um padrão.

A classe Date guarda informações sobre data, não sobre formatação. Quando você usa uma String formatada para criar um objeto Date, as informações são sempre guardadas do mesmo jeito, não importa o padrão da String. A Classe Date representa uma data em um Long cujo valor equivale à quantidade de milisegundos passados desde 01/01/1970. Toda vez que você quiser apresentar um objeto Date numa formatação, você vai precisar fazer um parse deste objeto para uma String. Ou seja, a responsabilidade de apresentar a data (num formato diferente do toString()) é externa ao objeto. Ou você cria um método que recebe um Date e retorno uma String formatada ou procura um componente do seu framework de apresentação que já faça isso.

Não entenda que estou dizendo para virar um desenvolvedor POS (Programação Orientado a Strings), trabalhe com Date. Só na hora de apresentá-la que você precisar passar por um formatador. É claro que seu bean já pode guardar a representação String formatada também.

opa! é isso ai mesmo

só que ao tentar transformar uma data String para uma data do tipo Date,
essa data perde a formatação!

a ideia é a seguinte:
–> recebe Date
–> formata a data, porém ela transforma em uma String
–> salva Date