Vraptor - abordagem para criar um controller "generico"

Prezados,

o vraptor recebe do http os o “grafo” e os dados para preencher um objeto: usuario.endereco.rua = “rua”

Ele consegue pegar essa string e instanciar todos os objetos do grafo e atribuir o valor.

Gostaria de fazer a mesma coisa porém independente de estar em um projeto web. Alguém pode me orientar como fazer isso assim como o vraptor faz?

Ou no minimo como fazer para desenvolver um método de controller generico onde eu possa receber qualquer coisa como:
usuario.endereco.rua ou pedido.itens[0].valor, mais uma string para instanciar o tipo correto dinamicamente.

abrasssss

Se entendi direito, vc precisa aprender sobre Reflections.

dá uma olhada nos caras que implementam ParametersProvider. O VRaptor tem 2 impls, uma usando o OGNL e outra usando o IOGI…

é só usar uma lógica parecida.

Nossa, mt massa esse tal de OGNL. Nunca tinha visto.

Excelente lucas, é isso mesmo que preciso. Até tinha chegado a ver essas classes mas não sabia como usar, vou criar um @component e adaptar para a minha necessidade.

mto obrigado

soh uma duvida com relação ao proprio vraptor, temos duas implementações uma com OGNL e outra com IOGI, como ele decide qual usar?

abrassss

pelos jars que estão no classpath… se estiver com o jar do ognl, ele usa o ognl, senão ele usa o iogi (na última versão)

tks!!

tentei criar uma classe com a mesma logica do OgnlParametersProvider porém lá dentro ele usa o método nullHandler e createAdapter do OgnlFacade, que são protected, por isso não consigo chamar esses métodos na minha classe.

Entao criei uma classe que estende (OgnlFacade), apenas para mudar a visibilidade dos métodos. Achei isso meio feio, sem contar que dai essa classe usa o VraptorConvertersAdapter onde tb vai acontecer a mesma coisa.

Existe uma solulção mais bonita?

Senao teria que copiar todas essas classes pro meu projeto.

abrasss

vc tá usando a lib do vraptor nesse projeto ou tá só copiando os fontes?

vc não precisa do converters adapter se não for usar os converters do vraptor.

to usando o vraptor.

ai precisava duma classe quase igual essa: OgnlParametersProvider

para usar algo como o método: getParametersFor

porem mudando a assinatura dele.

Entao copiei essa classe pro meu projeto e comecei alterar, mas ai não consigo usar os metodos das classes internas, como citado acima

hmm, deu pra entender +/-?

abrassss

não dá pra vc usar o método getParametersFor simplesmente, ao invés de tentar reimplementar tudo?

vc só precisa passar pra ele um HttpServletRequest com os parametros populados… dá pra fazer um fake disso facilmente.

é exatamente oq estou tentando fazer.

Copiei essa classe pro meu projeto e tentei reimplementar este unico metodo. porem dentro do metodo createRoot ela faz:

return ognl.nullHandler().instantiate(param.actualType());

e esse nullHandle está inacessivel.

Estou fazendo a abordagem certa? Como seria essa fake?

abssss

só criar uma implementação do HttpServletRequest que retorna os parâmetros que vc quer nos métodos getParameterNames() e getParameterMap()… vc pode usar o HttpServletRequestWrapper pra isso.

vc pode ao invés de usar esse ognl.nullHandler() usar new GenericNullHandler(removal);

e injetar esse removal na minha classe através do construtor correto?

excelente lucas. muito obrigado mesmo

vou fazer e volto a postar aqui o resultado.

abrasss