Javascript 从Spring表达式中修改rootObject
是否可以使用Javascript 从Spring表达式中修改rootObject,javascript,java,spring,spring-el,Javascript,Java,Spring,Spring El,是否可以使用SpEL从表达式中修改提供的rootObject 考虑以下代码以了解我的意思: Pojo: 表达方式: Person person = new Person(); person.setAge(18); SpelParserConfiguration config = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, this.getClass().getClassLoader()); ExpressionParser p
SpEL
从表达式中修改提供的rootObject
考虑以下代码以了解我的意思:
Pojo:
表达方式:
Person person = new Person();
person.setAge(18);
SpelParserConfiguration config = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, this.getClass().getClassLoader());
ExpressionParser parser = new SpelExpressionParser(config);
Expression ex = parser.parseExpression("age >= 18");
boolean result = ex.getValue(person, Boolean.class);
看看下面我想做什么。可能吗
ex = parser.parseExpression("if (age >= 18) {mature = true}");
// person now has mature == true
编辑:
可以使用支持JavaScript
并包含在JVM
中的javax.script
来代替SpEL
。这里有一个例子:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine jsEngine = manager.getEngineByName("JavaScript");
Person person = new Person();
person.setAge(18);
jsEngine.put("person", person);
jsEngine.eval("if (person.getAge() >= 18) { person.setMature(true); }");
// Calling person.isMature() in Java will now return `true`.
否您将获得下一个异常
SpelParseException
,并显示下一条消息error解析有效表达式后,表达式中仍有更多数据
您可以通过以下两个选项进行操作:
使用三元运算符:
使用两个spEL表达式:
谢谢你的回答。看起来SpEL并不是为我的需求而设计的。我可能会使用javax.script,正如我在这篇博文中所描述的
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine jsEngine = manager.getEngineByName("JavaScript");
Person person = new Person();
person.setAge(18);
jsEngine.put("person", person);
jsEngine.eval("if (person.getAge() >= 18) { person.setMature(true); }");
// Calling person.isMature() in Java will now return `true`.
SpelParserConfiguration config = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, this.getClass().getClassLoader());
ExpressionParser parser = new SpelExpressionParser(config);
Boolean parsedValue = parser.parseExpression("age >= 18 ? Mature=true : Mature=false").getValue(person, Boolean.class);
System.out.println(person.getMature()); // Output = true
System.out.println(parsedValue); //Output = true
SpelParserConfiguration config = new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, this.getClass().getClassLoader());
ExpressionParser parser = new SpelExpressionParser(config);
Expression ex = parser.parseExpression("age >= 18");
boolean result = ex.getValue(person, Boolean.class);
if(result)
parser.parseExpression("mature").setValue(person, "true");
System.out.println(person.getMature()); //Output = true