Весной оценить выражение (SpEL), как я могу заставить его не интерпретировать некоторые специальные символы
Я использую пружинный инструмент SpEL для оценки некоторых выражений.
Выражение содержит программно сгенерированный HTML/ CSS и некоторые переменные для оценки.
<span style='font-family: 'Comic Sans MS';>TOTAL HT = totalItem </span>
где totalItem является членом объекта Item;
Частичный пример:
Item item = new Item ("item", 1658);
String s = "<span style='font-family: 'Comic Sans MS';>TOTAL HT = 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 = ' + #totalItem + ' </span>'"
чтобы получить значение.
Следующий код обрабатывает это динамически, вам нужно позаботиться о split
часть для специальных символов.
ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
String input = "<span style='font-totalItemfamily: 'Comic Sans MS';>TOTAL HT = 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));