spring求值表达式(SpEL),如何强制它不解释某些特殊字符
我正在使用spring工具SpEL计算一些表达式 表达式包含通过编程生成的HTML/css和一些要计算的变量spring求值表达式(SpEL),如何强制它不解释某些特殊字符,spring,special-characters,expression-evaluation,Spring,Special Characters,Expression Evaluation,我正在使用spring工具SpEL计算一些表达式 表达式包含通过编程生成的HTML/css和一些要计算的变量 <span style='font-family: 'Comic Sans MS';>TOTAL HT = totalItem </span> TOTAL HT=totalItem”; StandardEvaluationContext itemContext=新的StandardEvaluationContext(项目); exp=pa
<span style='font-family: 'Comic Sans MS';>TOTAL HT = totalItem </span>
TOTAL HT=totalItem”;
StandardEvaluationContext itemContext=新的StandardEvaluationContext(项目);
exp=parser.parseExpression;
s2=exp.getValue(itemContext,String.class);
问题是SpEL解释所有“'”和所有”;“
因此,我正在寻找一种方法,迫使SpEl只解释我想解释的特殊字符。你应该转义这些字符,而不是解释它们 对于
”
,请像“
你可以保持原样。这里没有什么需要注意的: 您需要传递
“'TOTAL HT='+#totalItem+''”
以获取值
以下代码以动态方式处理此问题,您需要注意特殊字符的split
part
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));
ExpressionParser=new-SpelExpressionParser();
StandardEvaluationContext=新的StandardEvaluationContext();
String input=“对不需要解释的字符进行转义。谢谢,这个示例非常适用。我在寻找一种摆脱“'”这个角色的方法。如果我理解了这一点,我可以用简单的引号将任何字符转义,对吗?谢谢你的回答,这个例子很有用,但我不知道我的变量的真实名称。通常要计算的字符串来自数据库。杰森·马什的回答更符合我的情况。
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));