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

时间:2018-08-23 12:47:16

标签: java velocity

在使用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'在db.properties.vm [第2行,第42列]中不包含属性'environment'

但是,如果我这样说的话...就可以了...

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

不确定为什么要使用多个“”。在上下文密钥中导致此错误。 任何提示如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

您需要将上下文本身放在其中,例如:

context.put("context", context);

,然后您可以在模板中执行以下操作:

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