2010-06-24 4 views
3

Je suis à la recherche de la fonctionnalité suivante décrite ci-dessous. Le MessageFormat du soleil api ne correspond pas à mon besoin & l'expression Spring El peut-être aussi.Advance MessageFormat avec introspection

En supposant que nous avons une personne objet avec un nom:

Person person = new Person(); 
person.setName("fredop"); 
person.setAge("25"); 

String messageFormat="My name is {Person.name}, i'm {Person.age} years old"" 

System.out.println(Translate(person,messageFormat); 

Dans la méthode traduire, je vais passer un seul objet.

Cette dernière ligne imprimera:

"My name is fred, i'm 25 years old" 

Toute idée d'une réelle api faire cela?

Répondre

2

Groovy, qui est une extension du langage Java vers un rubis/python comme le langage, vous permet d'intégrer facilement des variables dans les chaînes:

String s = "Hello I'm a ${groovyname} string in which i can insert ${object.variable}" 
+0

tHANKS BEAUCOUP pour votre réponse, j'apprécie vraiment l'homme! – mada

0

Velocity est un moteur de modèle Java. Il permet à quiconque d'utiliser un langage de modèle simple mais puissant pour référencer des objets définis dans le code Java.

Vérifiez la User guide syntaxe etc.

2

Vous peut le faire en utilisant Spring Expression Langauge. Voici le code avec l'exemple:

import org.springframework.expression.common.TemplateParserContext; 
import org.springframework.expression.spel.standard.SpelExpressionParser; 
import org.springframework.expression.ExpressionParser; 

class Person { 
    private String name; 
    private int age; 

    public Person(String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 
} 

class Main { 
    public static void main(String[] args) { 
     Person p = new Person("abhinav", 24); 
     String expression = "my name is #{name} and my age is #{age}"; 
     System.out.println(SpelFormatter.format(expression, p)); 
    } 
} 

class SpelFormatter {  
    private static final ExpressionParser PARSER = new SpelExpressionParser(); 
    private static final TemplateParserContext TEMPLATE_PARSER_CONTEXT = 
      new TemplateParserContext();  

    public static String format(String expression, Object context) { 
     return PARSER.parseExpression(expression, 
       TEMPLATE_PARSER_CONTEXT).getValue(context, String.class); 
    } 
} 
+0

tHANKS BEAUCOUP pour votre réponse, j'apprécie vraiment l'homme! – mada

+0

Une autre solution est en utilisant Spring EL. voir TemplateParserContext. – mada

Questions connexes