为什么 Apache Velocity 无法处理多个点键

Why Apache Velocity cannot handle multiple dot keys

我在使用 Apache Velocity 1.7 时没有得到这个。 当我有这样的虚拟机时

db.connection.url = $db.customer.environment.db_url

和这样的上下文...

VelocityContext context = new VelocityContext();
context.put("db.customer.environment.db_url", "//sample_db_conn");

我遇到了这个错误

原因:org.apache.velocity.exception.MethodInvocationException:对象 'java.lang.String' 不包含 属性 'environment' db.properties.vm[第 2 行,第 42 列]

但是如果我这样说..它会起作用...

context.put("db.db_url", "//sample_db_conn");

不确定为什么有多个“.”在上下文键中导致此错误。 有什么提示可以解决这个问题吗?

点用作 属性 访问器。当 Velocity 看到 $db.customer.environment.db_url 时,它将尝试从 db 键下的上下文中获取一个对象,然后尝试对其调用 getCustomer()get("customer"),依此类推。

因此,对于 Velocity,在键中使用点是一个非常糟糕的主意 - 然而,有一些解决方法。

你需要把上下文放在自己身上,比如:

context.put("context", context);

然后在您的模板中您将能够执行以下操作:

$context.get("db.customer.environment.db_url")