Click Framework não faz bind de Enums

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

O copyTo apenas usa OGNL. Para cada campo da sua Form, ele chama Ognl.setValue no objeto.
Ative o debug para ver o que acontence, basta passar um true como parâmetro.

form.copyTo(aluno,true);

Vc pode enviar isto para a lista do click:
http://news.gmane.org/gmane.comp.web.click.user

O Malcolm sempre responde.

Parece que o Ognl não tem mesmo um suporte nativo para Enums. Mas de qualquer maneira, postei uma mensagem no link indicado.

Obrigado,
Thiago

O click assim como o webwork trabalha com OGNL ?

[quote=saoj]
O click assim como o webwork trabalha com OGNL ?[/quote]

O Click só neste caso. Para fazer as navegações, tipo :

pessoa.getEndereco().getRua().setNumero(5)

O WW usa em simplesmente tudo. As validações do tipo “expression” são expressões ognl, a tag ww:if executa uma expressao ognl, e bla bla…

Como vc faz no menta Sergio?

:cry: :cry: :cry: :cry:

O mentawai suporta o PONTO (.) do mesmo jeito que EL, mas com algumas melhorias.

Ex:

<mtw:out value=“user.name” />

<mtw:if value=“user.gay” > // pega tb isGay()

<mtw:if value=“user.permission” > // pega tb hasPermission()

Sem contar que com EL vc não consegue pegar o size de nenhuma collection devido a falta de um getSize() !!!

sim, como estão sendo as experiências de vcs com o Click ?

Olá,

eu não avancei muito com o Click, mas gostei muito do framework. A minha experiência com o framework foi mesmo um teste. Era um CRUD para uma classe aluno, e consegui desenvolver o exemplo muito rápido. Em minha opinião, achei fácil e ágil.

O único problema mesmo foi com o bind do java 5 enums, que solucionei usando o código que postei acima, no entanto, o pessoal lá já sabe do problema e acredito que em breve darão suporte.

A curva de aprendizagem também não é grande. IMHO, mais fácil do que aprender SpringMVC.