- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当 HashMap 中的顶级键可能存在也可能不存在时,如何解决 PropertyAccessExceptions?
在下面的示例中,如果属性存在,它就可以正常工作,但如果变量映射中不存在该属性,则会抛出 PropertyAccessExceptions。我知道我可以使用 ?对于 null 安全导航,但是当该属性存在于顶层时,这不起作用。
有什么建议吗?
HashMap<String, Object> variables = new HashMap<>();
variables.put("aProperty", "aValue");
Boolean result = MVEL.evalToBoolean("'aValue' == aProperty", variables);
assertThat(result).isTrue(); //This works
result = MVEL.evalToBoolean("'aValue' == aNonExistentProperty", variables);
assertThat(result).isFalse(); //This throws a PropertyAccessException, since aNonExistentProperty is not defined
我想要一种解决方法来避免 PropertyAccessException。
最佳答案
我最近遇到了同样的问题,我发现 MVEL 有不同的方法来评估表达式,其中一个方法是,对于 boolean 值,public static Boolean evalToBoolean(String expression, VariableResolverFactory vars)
。当您传递变量的 Map 时,它会在内部实例化 CachingMapVariableResolverFactory ,您可以覆盖它以避免此问题。
示例实现如下
public class CustomVariableResolvableFactory extends CachingMapVariableResolverFactory{
public CustomVariableResolvableFactory(Map variables) {
super(variables);
}
@Override
public boolean isResolveable(String name) {
if(!super.isResolveable(name))
variables.put(name, null);
return true;
}
}
此类将确保每当 PropertyAccessor 检查变量是否存在于求值上下文中时,如果不存在,它会放置一个 null 并返回 true,从而避免 PropertyAccessExceptions。VariableResolverFactory
的自定义实现可以按如下方式使用。
MVEL.eval(表达式, new CustomVariableResolvableFactory(vars))
我不知道这是否是一种黑客攻击,或者它是否意味着像这样使用,但它有效
关于java - 如何避免 MVEL PropertyAccessExceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890178/
我有一个 JAVA 类,它有两个方法。第一个是主要方法,第二个是 method1()。 假设以下是类: public class SomeClass() { public static void
我有一个 JAVA 类,它有两个方法。第一个是 main 方法,第二个是 method1()。 假设以下是该类: public class SomeClass() { public static
我在 MVEL 中创建了一个 map ,我必须使用 foreach 对其进行迭代。我该怎么做? 还有一个类似的问题: How to iterate over a map in mvel但在那种情况下,
我看到 MVEL 支持 for 循环和 foreach 模板,但如何从循环中“中断”或“继续”? 最佳答案 文档中没有提及对“中断”或“继续”的支持:http://mvel.codehaus.org/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
根据 [ http://mvel.codehaus.org/Value+Emptiness 中的 MVEL 文档] empty 如果满足以下条件,则应评估为 true。 字符串的长度大于 0,但仅由空
MVEL 使得向解析器上下文提供自定义函数变得非常容易,但尚不清楚是否有“官方”方法来重载运算符的求值方式。我想到了两个具体的用例: 对数组执行算术应该将操作映射到数组的每个元素上,这样: [1,2,
我想将 MVEL 包含到另一个 MVEL 文件中,我尝试使用 @Include 但它对我不起作用, 任何人都可以建议我如何在另一个 MVEL 文件中使用 MVEL 这是我的代码 Dear @{FIRS
有人知道如何调整 MVEL 以使用不区分大小写的比较吗? Map map = new HashMap<>(); map.put("Name", "Igor"); String property = "
我们目前正在构建自己的产品和框架。我们有一个规则引擎,内部使用 MVEL API 来计算表达式。 最近我们遇到了一个问题 假设我有一个“规则”,其中有很多嵌套的条件。 ( A && ( B && (
我有这个类层次结构 学生类.java public class StudentClass { private List studentList; public List getStud
有没有办法让 MVEL 2.0 ( http://mvel.codehaus.org/ ) 与带有可选参数的函数一起工作? 我希望能够评估这个: trunc('blahblah',2) 还有 trun
我在我的 Java 代码中有预定义的变量,我想在 MVEL 表达式中使用这些变量。我不想传递上下文。 String Col1 = "C"; String Col2 = "D"; String expr
我的类路径中有一个 approprivate jar, org.mvel mvel2 2.4.4.Final jar
当 HashMap 中的顶级键可能存在也可能不存在时,如何解决 PropertyAccessExceptions? 在下面的示例中,如果属性存在,它就可以正常工作,但如果变量映射中不存在该属性,则会抛
我在我的 Java 代码中有预定义的变量,我想在 MVEL 表达式中使用这些变量。我不想传递上下文。 String Col1 = "C"; String Col2 = "D"; String expr
如何在 MVEL 中将字符串转换为整数 Props['MyInteger'] = java.lang.Integer.ParseInt('//某个字符串的 xpath') 其他 java 类型在我的代
我需要计算 MVEL 中包含日期的表达式。基本上,我需要向给定日期添加一定的天数并获取值。当我尝试评估 MVEL 中的表达式时,出现一些异常。 这是我的代码:: package Mvel; impor
对象 obj=帐户;这里的帐户对象包含书籍作为内部对象。那么我如何访问 mvel 中的这些值。 我是 MVEL 新手。那么您能否建议我如何克服上述问题。 最佳答案 MVEL 适用于 OGNL。 假设A
如果我在 MVEL 中有这个脚本: myString = null; if (myString == "Foo") { return true; } 我会在这个脚本中得到一个空指针吗? 因为我
我是一名优秀的程序员,十分优秀!