Весной оценить выражение (SpEL), как я могу заставить его не интерпретировать некоторые специальные символы

Я использую пружинный инструмент SpEL для оценки некоторых выражений.

Выражение содержит программно сгенерированный HTML/ CSS и некоторые переменные для оценки.

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

где totalItem является членом объекта Item;

Частичный пример:

Item item = new Item ("item", 1658);
String s = "<span style='font-family: 'Comic Sans MS';>TOTAL HT &nbsp; = totalItem </span>";
StandardEvaluationContext itemContext = new StandardEvaluationContext(item);
Expression exp = parser.parseExpression(s);
s2 = exp.getValue(itemContext, String.class);

Проблема в том, что SpEL интерпретирует все " ' " и все "; ".

Поэтому я ищу способ заставить SpEl интерпретировать только тот специальный символ, который я хочу.

2 ответа

Решение

Вы должны избегать этих символов, а не интерпретировать их.

за 'спасайся как ''И вы можете просто уйти ; как есть.

Здесь нужно позаботиться о нескольких вещах:

Вам нужно будет пройти "'<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));
Другие вопросы по тегам