3

最近我尝试了 JUEL,现在我很困惑如何编写几个我在文档中找不到示例的方法。

它只给我这个 http://juel.sourceforge.net/guide/start.html

如果有的话,我想知道如何写出来context.setFunction("meh", "max", BigDecimal.class.getMethod("compareTo", BigDecimal.class));

既然我们知道 bigDecimal 表达式是这样写的,那么foo.compareTo(bigDecimal); 如何在表达式中写这个?

4

1 回答 1

1

用 2 个可能的答案轻松完成

  1. 既然SimpleContext让你做算术计算(在我的例子中),我只是把计算放在这里。我还使用ValueExpression(我猜不是在正确的位置)为我提供来自SimpleContext. 因此,这就是我所拥有的

    context.setVariable("fii", factory.createValueExpression(new BigDecimal(3), BigDecimal.class));
    context.setVariable("fee", factory.createValueExpression(new BigDecimal(5), BigDecimal.class));
    
    ValueExpression e1 = factory.createValueExpression(context, "${fee}", BigDecimal.class);
    ValueExpression e2 = factory.createValueExpression(context, "${fii}", BigDecimal.class);
    
    String temp1 = (String)e1.getValue(context).toString();
    String temp2 = (String)e2.getValue(context).toString();
    
    context.setVariable("foo", factory.createValueExpression(new BigDecimal(temp1).add(new BigDecimal(temp2)), BigDecimal.class));
    
    ValueExpression e = factory.createValueExpression(context, "${foo}", BigDecimal.class);// will return 8
    

但是再一次我真的不知道它是否正确,所以我想出了第二个

  1. 创建一个类,创建一些需要 2 个参数的静态方法,然后就可以了。假设这个类名为Operate

    public static BigDecimal add (BigDecimal val1, BigDecimal val2){
        return val1.add(val2);
    }
    
    public static BigDecimal subtract (BigDecimal val1, BigDecimal val2){
        return val1.subtract(val2);
    }
    

    然后,我这样称呼它

    context.setFunction("meh", "max", Operate.class.getMethod("add", BigDecimal.class, BigDecimal.class));  
    ValueExpression e = factory.createValueExpression(context, "${meh:max(fii,fee)}", BigDecimal.class);// also return 8  
    

我更喜欢使用第二个,希望这会有所帮助

于 2019-01-29T03:27:17.923 回答