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 ?
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.
Exemplo :
ActionForm :
public class TesteForm extends ActionForm
{
private Teste teste = new Teste();
public Teste getTeste()
{return teste;}
public void setTeste(Teste teste)
{this.teste = teste;}
}
Bean :
public class Teste
{
private Date data;
public Date getData()
{return data;}
public void setData(Date data)
{this.data = data;}
}
HTML:
<input type="text" name="teste.data">
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
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.
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.
public class DateBeanConvert implements Converter
{
public Object convert(Class arg0, Object arg1)
{
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date data = null;
try
{
data = format.parse((String)arg1);
}
catch (ParseException e)
{
e.printStackTrace();
}
return data;
}
}
e após isso, no meu ActionForm, registrei o conversor no construtor da classe.
public class TesteForm extends ActionForm
{
private Teste teste = new Teste();
// No construtor eu realizo a conversão
public TesteForm()
{
// Registrando o conversor para data . . .
ConvertUtils.register(new DateBeanConvert(), Date.class);
}
public Teste getTeste()
{return teste;}
public void setTeste(Teste teste)
{this.teste = teste;}
}
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.
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