API para EL estilo ${asdasdas}

13 respostas
Rubem_Azenha

Olá pessoal.

To numa correria aqui, preciso de uma API para EL.
De preferência algo bem simples, do tipo que eu diga para ela quais os meus valores dos parâmetros em algo como um map e que ela parseia um valor do tipo ${nomeDoParâmetro}.

Alguém recomenda uma com uma baixa curva de aprendizado?

13 Respostas

Thiago_Senna

Não rolaria o commons-el?

Deve ter perdido em algum lugar junto com o as libs do tomcat.

Este tutorial talvez ajude: http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html#wp71019

Se vc tiver o Head First JSP e Servlet também é uma mão na roda para aprender EL.

Por default, um comando do tipo ${meuMap.valor} acessaria um map chamado “meuMap” que está na requisição e acessaria o valor cuja key é igual a “valor”.

Mas vale a pena vc também procurar sobre a diferença entre ${meuMap.valor} para acessar maps ou beans, e ${minhaLista[0]} para acessar maps, listas, arrays e beans.

Até +

Z

Certa vez eu precisei disso para fazer binds em variáveis SQL, alguém aqui no fórum sugeriu até o uso da commons-EL, mas eu achei canhão pra matar formiga.

Se você precisa apenas buscar valor (nao precisa processar expressao aritmetica, por exemplo), pode usar a commons-beanutils pra navegar nos beans e achar os valores.

Rubem_Azenha

se não fosse pedir muito, eles bem que poderiam colocar só um exemplozinho na página deles…

Mauricio_Linhares

O Velocity também faz isso.

Z

Pensei exatamente o mesmo quando fui tentar usar commons-EL.

D

vc precisa parsear coisas do tipo ${blablabla} e o conteudo (blablabla) seria uma chave de um HashMap?

e tb poder acessar propriedades desse objeto guardado? algo do tipo de ${user.nome} ??? onde buscaria o “user” dentro de um Map e acessaria a propriedade “name”???

se for isso, sugiro vc nao usar API pra isso nao…

o pessoal tem mania de falar aquela frase irritante e corta-barato “pq nao usar uma coisa ao invez de tentar reiventar a roda?”
eu sou a favor de vc desenvolver as coisas as suas necessidades…

claro q usar API prontas é legal, desde q vc faça proveito de pelo menos 80% de toda API… senao, vc só vai entupir seu códigos com 500 classes inúteis… seu projeto q só com suas classes seria apenas alguns KBs (coisa bem simples) para algumas dezenas de MBs se usar framework, APIs pra resolver tudo… e vc ainda perde o controle das suas coisas…

se vc quer apenas resolver o problema q eu citei no começo do meu post, faça vc mesmo, é divertido, vc aprende mais, seu projeto fica menor, vc entende o q acontece nele, e o código é seu…
ja fiz uma coisa mto parecida com esse seu problema
pra resolver isso, basta 2 regular-expression e um manager q trata o seu Map como se fosse um HttpServletRequest (pelo menos na parte de Attributes)… vai precisar usar reflection tb pra poder acessar atributos do objeto (de forma recursiva para casos ${obj.obj1.obj2.name})

qualquer duvida sobre implementacao, posta aí

desculpa pelo desabafo.
abraços

Thiago_Senna

Outra opção talvez seja usar OGNL, que parece pelo menos ter alguma documentação aparentemente melhorzinha.

É só uma sugestão, dependendo do que você está querendo fazer, seria mais interessante BeanUtils da jakarta ou até mesmo uma classe utilitária utilizando reflection, como sugerido nos posts acima.

Se o problema for bind, por exemplo, não valeria a pena usar as classes beanWrapper, PropertiesEditor e DataBind do Spring?

C

Freemarker?

Rubem_Azenha

fiz uma solução caseira mesmo
Queria algo simples, como o a EL do Maven.

_fs

Velocity:
http://www.guj.com.br/posts/list/19118.java

J

Olá amigo uso somente a JSTL que trabalha muito bem e é oficial pela SUN.

Bastante simples de trabalhar e instalar em sua aplicação.

precisas de ajuda :?: , da um tok :wink:

Abraços.

Rubem_Azenha

Boa! Velocity! vou testar

mister_m

O commons-el é usado no genesis aqui

Criado 4 de abril de 2006
Ultima resposta 5 de abr. de 2006
Respostas 13
Participantes 9