使用Spring EL表达式模板

问题描述 投票:1回答:2

我想用弹簧EL简单的模板像"Some text: #{some dynamic value from map}"。在我的情况下,从docs例子不适合,因为它只能用于数值表格图:

    Map<String, Object> data = new HashMap<String, Object>();
    data.put("property", 123);

    String message = "#data['property']";

    ExpressionParser parser = new SpelExpressionParser();
    StandardEvaluationContext context = new StandardEvaluationContext();
    context.setVariable("data", data);

    System.out.println(parser.parseExpression(message).getValue(context, String.class));

在这种情况下输出123,但String message = "Some text: #data['property']";创建例外

org.springframework.expression.spel.SpelParseException: EL1041E:(pos 5): After parsing a valid expression, there is still more data in the expression: 'text'
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:129)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:60)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:76)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpression(TemplateAwareExpressionParser.java:62)

什么是我的错?

java spring spring-el
2个回答
1
投票

文本必须是一个常量。

你现在有什么看起来像这样在java中...

String s = some text: data.get("property");

......这显然不会编译。

如果你在使用Java语言编写的,你需要使用...

String s = "some text: " + data.get("property");

...所以你需要使用规划环境地政司相当于...

"'Some text: ' + #data['property']"

0
投票

作为替代方案,您可能希望使用TemplateParserContext提到Expression templating。然后,您的例子如下所示:

        Map<String, Object> data = new HashMap<String, Object>();
        data.put("property", 123);

        String message = "Some text: #{#data['property']}";

        ExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression(message, new TemplateParserContext());
        StandardEvaluationContext context = new StandardEvaluationContext();
        context.setVariable("data", data);

        System.out.println(expression.getValue(context,String.class));
© www.soinside.com 2019 - 2024. All rights reserved.