为什么 Apache 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 中的属性 'environment' [第 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")

最新更新