Java 与JUEL一起处理不同的上下文
我在处理这些表达式,并尝试使用我们在创建时使用的上下文和我们在评估时使用的上下文。 下面是一些代码,它们试图重现我的需求并突出问题 ExpressionFactory=new ExpressionFactoryImpl; SimpleContext createContext=新SimpleContext; createContext.setVariablemyBean,factory.createValueExpressionnew MyBeanLaurent,MyBean.class; 字符串表达式; 表达式=${myBean.foo}${exchange.host}; ValueExpression expr=factory.createValueExpressioncreateContext,表达式,String.class; System.out.printlexpr类:+expr.getClass; SimpleContext evalContext=新SimpleContext; 列表主机=asListwww.example.com、www.foo.com、www.bar.com; //我想对同一个表达式求值,但变量交换的值不同。 对于字符串主机:主机{ evalContext.setVariableexchange,factory.createValueExpressionnew MyExchange主机,MyExchange.class; System.out.printlexpression+=+expr.getValueevalContext; } 我在上面设置了一个基本的Maven项目来复制它Java 与JUEL一起处理不同的上下文,java,juel,Java,Juel,我在处理这些表达式,并尝试使用我们在创建时使用的上下文和我们在评估时使用的上下文。 下面是一些代码,它们试图重现我的需求并突出问题 ExpressionFactory=new ExpressionFactoryImpl; SimpleContext createContext=新SimpleContext; createContext.setVariablemyBean,factory.createValueExpressionnew MyBeanLaurent,MyBean.class; 字符
您能告诉我为什么出现以下错误:javax.el.PropertyNotFoundException:找不到属性交换吗?这不是JUEL问题,而是一个一般的el问题。变量在解析时绑定。一旦解析了表达式,就不能对其进行更改。在评估时,您需要改用属性:
evalContext.getELResolver().setValue(
evalContext,
null,
"exchange",
new MyExchange(host));
有关详细信息,请参阅。这个问题最初是作为一个问题提出的,但作者让我在stackoverflow上发布这些一般性问题。谢谢。这很有效。我需要一个setProperty方法。