提问人:tuk 提问时间:6/16/2023 最后编辑:Arpita Shrivastavatuk 更新时间:6/18/2023 访问量:134
Apache Velocity:验证上下文中的所有变量是否都存在于速度模板中
Apache Velocity: Verify if all variables in a context are present in velocity template
问:
是否可以在 Apache Velocity 1.7 中检查 中指定的所有键是否对模板有效?例如,假设我有一个模板,如下所示:VelocityContext
card.vm
card {
type: CREDIT
company: VISA
name: "${firstName} ${lastName}"
}
如果我随后执行以下代码,它应该会抛出一个错误,因为模板中不存在:cardNumber
card.vm
VelocityContext context = new VelocityContext();
context.put("firstName", "tuk");
context.put("lastName", "man");
context.put("cardNumber", "1234");
StringWriter writer = new StringWriter();
t.merge(context, writer);
答:
0赞
mkienenb
6/18/2023
#1
正如 Christopher 在 velocity 邮件列表上提到的,您始终可以创建 VelocityContext 的子类来自定义这样的行为。
例如,这将跟踪哪些键已放入上下文中,并跟踪在上下文中使用了哪些键。然后,在合并模板后调用 context.checkForUnreferencedValues()。
您可能需要自定义代码,具体取决于哪些帮助程序对象正在向上下文添加键,以及您是否重用它。
static class ReferenceCountingVelocityContext extends VelocityContext {
private Set<String> keysToCheck = new HashSet<>();
private Set<String> keysUsed = new HashSet<>();
@Override
public Object put(String key, Object value) {
keysToCheck.add(key);
return super.put(key, value);
}
@Override
public Object get(String key) {
keysUsed.add(key);
return super.get(key);
}
public void checkForUnreferencedValues() throws UnusedVelocityContextKeyException {
if (!keysToCheck.containsAll(keysUsed)) {
throw new UnusedVelocityContextKeyException();
}
}
}
评论