spring评估表达式(SpEL),我怎么能强迫它不解释一些特殊的characteres

时间:2015-09-30 07:41:02

标签: spring special-characters expression-evaluation

我使用Spring工具SpEL来评估一些表达式。

表达式包含以编程方式生成的HTML / css和一些要评估的变量。

invalid operands to binary ^ (have ‘void *’ and ‘int’)

其中totalItem是对象Item的成员;

部分示例:

<span style='font-family: 'Comic Sans MS';>TOTAL HT &nbsp; = totalItem  </span>

问题是SpEL解释了所有&#34; &#39; &#34;和所有&#34; ; &#34;

所以我正在寻找一种方法来强制SpEl只解释我想要的特殊问题。

2 个答案:

答案 0 :(得分:0)

你应该逃避这些角色而不是解释它们。

'

,像''一样逃避它们 你可以保持原样;

答案 1 :(得分:0)

这里有几点需要注意:

您需要传递"'<span style=''font-total: ''Comic Sans MS'';>TOTAL HT &nbsp; = ' + #totalItem + ' </span>'"才能获得该值。

以下代码以动态方式处理此问题,您需要处理split部分的特殊字符。

        ExpressionParser parser = new SpelExpressionParser();
        StandardEvaluationContext context = new StandardEvaluationContext();

        String input = "<span style='font-totalItemfamily: 'Comic Sans MS';>TOTAL HT &nbsp; = totalItem  </span>";
        String variableToEvaluate = "totalItem";
        String[] splits = input.split(variableToEvaluate);

        boolean appendedValue = false;
        StringBuilder expressionBuilder = new StringBuilder();
        for (int i = 0; i < splits.length; i++) {
            if (appendedValue) {
                expressionBuilder.append("#");
                expressionBuilder.append(variableToEvaluate);
                expressionBuilder.append(" + ");

            }
            expressionBuilder.append('\'');
            expressionBuilder.append(splits[i].replace("'", "''"));
            expressionBuilder.append('\'');
            appendedValue = true;
            if (i + 1 != splits.length) {
                expressionBuilder.append(" + ");
            }
        }
        System.out.println(expressionBuilder.toString());
        context.setVariable(variableToEvaluate, 1);
        Expression exp = parser.parseExpression(expressionBuilder.toString());
        System.out.println(exp.getValue(context, String.class));