iam構建一個小型應用程序來處理變量。 第一步是解決變量之間的簡單依賴關係。 我無法讓事情正常運行。 我可以解析非常簡單的聲明,如a = 10,但如果它稍微複雜一些,它總是失敗: a = b; B = 10。 我降低我的代碼下面幾行:Javax.el,ELResolver:解決變量之間的依賴關係
import javax.el.BeanELResolver;
import javax.el.ELContext;
import javax.el.ELResolver;
import javax.el.ExpressionFactory;
import javax.el.FunctionMapper;
import javax.el.ValueExpression;
import javax.el.VariableMapper;
import org.jboss.el.ExpressionFactoryImpl;
import org.jboss.el.lang.VariableMapperImpl;
public void testEvalutation() throws Exception{
ExpressionFactory factory = new ExpressionFactoryImpl();
ELContext context = new ELContext() {
final ELResolver elResolver = new BeanELResolver();
final VariableMapper variableMapper = new VariableMapperImpl();
public ELResolver getELResolver() { return elResolver; }
public FunctionMapper getFunctionMapper() { return null; }
public VariableMapper getVariableMapper() { return variableMapper; }
};
ValueExpression a = factory.createValueExpression(context, "#{b}", Float.class);
ValueExpression b = factory.createValueExpression(context, "#{c}", Float.class);
ValueExpression c = factory.createValueExpression(context, "#{10}", Float.class);
context.getVariableMapper().setVariable("a",a);
context.getVariableMapper().setVariable("b",b);
context.getVariableMapper().setVariable("c",c);
ValueExpression expression = context.getVariableMapper().resolveVariable("a");
assertEquals(10f,expression.getValue(context));
}
結果爲 'a' 爲0.0。 是否有任何錯誤或你知道一種方式我可以讓我的代碼運行?
謝謝你的任何建議
我注意到您只使用一個[BeanELResolver(http://docs.oracle.com/javaee/7/api/javax/el/ BeanELResolver.html)。通常,您可以創建一個[CompositeELResolver](http://docs.oracle.com/javaee/7/api/javax/el/CompositeELResolver.html),如[本博客文章]中所示(http://illegalargumentexception.blogspot。 co.uk/2008/04/java-using-el-outside-j2ee.html)。 – McDowell
嗨,我已閱讀你提到的例子,並在我的代碼中嘗試了類似的評估。如果我設置a = 10和b = 5,我可以創建一個像$ {a + b}這樣的表達式,其結果是正確的結果:15.但是這個例子並不顯示如何鏈接到變量a = b; B = 10。即使使用CompositeELResolver,我仍然沒有得到正確的結果。 – user3355449