Click Framework não faz bind de Enums

7 respostas
Thiago_Senna

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.

public boolean onOkClicked() {
		if (form.isValid()) {
			Aluno aluno = new Aluno();
			form.copyTo(aluno);
			
			alunoService.criaAluno(aluno);
			
			setForward(ListaAlunosPage.class);
		}
		
		return true;
	}
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.

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);
	}

}
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

7 Respostas

ricardolecheta

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.

Thiago_Senna

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

saoj

O click assim como o webwork trabalha com OGNL ?

ricardolecheta

saoj:

O click assim como o webwork trabalha com OGNL ?

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?

saoj

: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() !!!

Fabricio_Cozer_Marti

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

Thiago_Senna

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.

Criado 5 de setembro de 2006
Ultima resposta 29 de set. de 2006
Respostas 7
Participantes 4