Apache Velocity 1.7:能否验证VelocityContext所有键均为模板有效键?
Apache Velocity 1.7 上下文键与模板有效性检查问题
核心结论
在Apache Velocity 1.7中,默认不会因VelocityContext存在模板未引用的键而抛出错误。就像你给出的示例,cardNumber未在card.vm中使用,执行模板合并时不会触发任何错误,模板会正常完成渲染。
详细说明
Velocity的设计逻辑是仅解析模板中实际引用的上下文变量,对于上下文里多余的键值对,会直接忽略,不会做额外校验或报错。这种设计是为了保留模板渲染的灵活性——比如你可以复用同一个上下文对象给多个不同模板渲染,无需每次严格裁剪上下文内的键值。
如果需要实现“检查上下文所有键是否都被模板使用”的功能,Velocity 1.7本身没有内置该特性,但可以手动实现:
- 解析模板,提取所有被引用的变量名(可借助Velocity的
Template对象获取语法树,或用正则表达式匹配模板中的$var、${var}等变量引用格式) - 将提取到的变量集合与VelocityContext的键集合对比,找出未被使用的键,再自行抛出错误或给出提示
示例执行结果
你提供的代码执行后,模板会输出如下内容:
card { type: CREDIT company: VISA name: "tuk man" }
cardNumber因未被模板引用,完全不影响渲染过程,也不会触发任何错误。
内容的提问来源于stack exchange,提问作者tuk
相关产品推荐
相关产品推荐

