Olá,
comecei a brincar com o Click Framework, e infelizmente, não consegui fazer o bind dos enums de uma forma confortável. Também parece que não tem muito material disponível no google para ajudar. No código abaixo, a classe Aluno tem um atributo do tipo Sexo, que é um Enum, mas a ação form.copyTo(aluno) não copia para o objeto o enum.
[code]public boolean onOkClicked() {
if (form.isValid()) {
Aluno aluno = new Aluno();
form.copyTo(aluno);
alunoService.criaAluno(aluno);
setForward(ListaAlunosPage.class);
}
return true;
}[/code]
Select sexoSelect = new Select("sexo");
sexoSelect.add(new Option(Sexo.MASCULINO, "Masculino"));
sexoSelect.add(new Option(Sexo.FEMININO, "Feminino"));
form.add(sexoSelect);
Bom, para falar que não fiz nada, até achei uma solução para contornar isto, mas sabe como é né. Fazer gambi é @#$%. A solução foi usar o ServletRequestDataBinder do spring.
[code]public class ClickUtil {
private static CustomDateEditor dateEditor;
static {
dateEditor = new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true);
}
public static void copyFormToObject(Form form, Object obj) {
ServletRequestDataBinder binder = new ServletRequestDataBinder(obj);
registerCustomEditors(binder);
binder.bind(form.getContext().getRequest());
}
private static void registerCustomEditors(DataBinder binder) {
binder.registerCustomEditor(Date.class, dateEditor);
}
}[/code]
ClickUtil.copyFormToObject(form, aluno);
Achei interessante postar esta questão aqui por que não achei nada na net sugerindo uma solução, e também gostaria de saber se alguém já teve este problema, e se possível, citar como resolveu. Existe alguma maneira melhor de resolver o bind dos enums no Click Framework?
Thiago Senna