Procurei mas não encontrei solução para o seguinte caso : Submeter um dado do tipo data para meu ActionForm, o mesmo não consegue ser convertido de String para Data. Vi que o Struts utiliza o BeanUtills para conversão dos tipos. Preciso adicionar alguma coisa para que possa haver essa conversão ?
Para resolver este problema, utilizei POG … mas acho q tem um jeito melhor.
Lah vai a gambi:
no seu action form vc trabalha com 2 conjunto de set’s e get’s p/ um mesmo atributo data
ActionForm
public Date getData() {
Date data = null;
try {
data = sdf.parse(this.data);
} catch (ParseException e) {
e.printStackTrace();
}
return data;
}
public void setData(Date data) {
this.data = sdf.format(data);
}
public String getData_html() {
return data;
}
public void setData_html(String data) {
this.data = data;
}
Neste caso vc usaria data no bean e data_html no jsp
Mas use isso como ultimo recurso, acho tosco
A
Alucard
Valeu Marcelo, vou dar uma olhada no link.
Pois é hover, realmente é tosco, mas se eu fizer dessa forma do jeito que eu estou pensando em implementar meu ActionForm ficará mais tosco ainda. Pois eu queria instanciar meu objeto dentro do actionForm e depois pega-lo na minha action.
Dessa maneira eu já iria popular meu objeto sem ter que ficar repetindo todos os atributos do bean para o actionForm. Com isso, a gambiarra da data seria ainda maior ehhehehe
hover
Então, do jeito q vc estava pensando não iria funcionar pois vc iria estar setando uma String em um objeto Date.
O ideal eh usar o que o marcelo falou.
A
Alucard
Isso mesmo, o problema é onde eu vou implementar isso. Pode me corrigir se eu estiver errado, mas quando eu realizar um submit, primeiro será chamado o actionForm e depois será chamada a action. Então acho que não tenha como converter a data, pois antes de chegar a action já será lançada a exceção.
Bem, vou tentar alguma maneira de implementar isso.
Muito obrigado pela ajuda de vcs.
marcelo_mococa
Você não precisa fazer este monte de POG`s…
Implemente um conversor para objetos Date e registre-o no BeanUtils. Veja o link que eu passei. Não tem segredo.
Fica muito mais bonito e resolve o problema de uma vez só.
É a minha oponião.
A
Alucard
Bom dia,
Gostaria de compartilhar a solução que consegui com a ajuda do Marcelo.
Utilizando de exemplo o que ele me passou, eu criei a classe de conversão utilizando o BeanUtils.
e após isso, no meu ActionForm, registrei o conversor no construtor da classe.
publicclassTesteFormextendsActionForm{privateTesteteste=newTeste();// No construtor eu realizo a conversão publicTesteForm(){// Registrando o conversor para data . . .ConvertUtils.register(newDateBeanConvert(),Date.class);}publicTestegetTeste(){returnteste;}publicvoidsetTeste(Testeteste){this.teste=teste;}}
E pronto ! Aparentemente está tudo em ordem
Valeu !
marcelo_mococa
Legal…
apenas uma dica…
Dessa forma, você está registrando o conversor quando carregar um determinado Form. Se você utilizar algum form antes deste, ele não usará o conversor.
O melhor é criar um listener de contexto para registrar os conversores.
A
Alucard
Realmente, estava pensando em uma maneira de registrar somente uma vez e me esqueci do listener :XD:
Valeu :thumbup:
Feijao
Só toma cuidado porque uma vez registrado o conversor ele vai valer para todos os forms.
Esses conversores são válidos globalmente a partir do primeiro registro.
joe_cqr
pessoal, só uma dúvida referente a esse conversor, caso aconteça algum erro a action vai retornar o usuário para o formulário, mas no campo da data aparece