2010-01-20 2 views
2

Salutations,Java Expression Language: Interpolation?

Dans le webapplication je développe, je veux faire quelque chose comme suit:

J'ai un Bean comme

class Gene{ 
String geneid; 
String sequence; 
.. 
} 

// EL expression (sometimes should be simple as "${geneid}" without URL pattern) 
String exp="<a> href='http://www.ncbi.nlm.nih.gov/pubmed?term=${geneid}' />"; 
String outputString=someframeworkobject.somemethod(exp,aGeneInstance); 

Ainsi, le outputString est interpolée comme: http://www.ncbi.nlm.nih.gov/pubmed?term=gene19191X

Existe-t-il des structures EL légères que je peux utiliser pour cela?

+0

Pour ajouter ma propre question: Peut-on appeler le JSP EL (qui serait un ajustement ici) à partir du code Java? – Thilo

+0

Je suis tombé sur Apache Common JEXL et Commons EL.Mais je ne sais pas comment je peux résoudre ce –

+0

voir aussi http://stackoverflow.com/questions/1133660/open-source-expression-engines-java – Thilo

Répondre

3

Peut-être que MVEL fonctionnerait pour vous.

Avec un modèle comme

Hello, @{person.getSex() == 'F' ? 'Ms.' : 'Mr.'} @{person.name} 

vous pouvez faire

context.put("person", personBean); 
String output = (String) TemplateRuntime.eval(template, context); 

Découvrez this tutorial (où je lis à ce sujet, je n'ai aucune expérience avec MVEL).

2

Il semble que tout ce dont vous avez besoin est la classe de base de la bibliothèque Java MessageFormat. Il est assez facile à utiliser et vous permet de faire le remplacement de modèles dans une chaîne.

String outputString = MessageFormat.format("<a> href='http://www.ncbi.nlm.nih.gov/pubmed?term={0}' />", "gene19191X"); 

Vous pouvez également créer une instance de MessageFormat et la réutiliser avec des valeurs différentes.

D'autres options vous pouvez également essayer sont:

  • Apache Commons EL - Ceci est construit pour les expressions dans les applications Web.
  • Groovy GStrings - Je l'utilise parfois pour évaluer un 'script'. Cela a l'avantage de permettre une logique plus complexe.
+0

MessageFormat ne fait pas d'expressions , bien que. Je suppose que vous pourriez combiner MessageFormat avec un langage d'expression, comme JUEL. – Thilo

+0

J'ai besoin d'une solution plus dynamique, car le bean 'Gene' ci-dessus n'est qu'un exemple. J'utilise beaucoup de classes Bean et j'ai besoin de quelque chose comme BeanUtils pour traiter les valeurs de champs. –