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