尝试按实体名称获取时地图不起作用

Map not working when trying to get by entity name

我正在使用 Telosys 工具生成实体 类,它为我创造了奇迹。 但是我有一个特定的要求来更改实体的某些属性。

我已经在地图中加载了所有需要更改的属性,并在我的实体模板中对其进行了解析。但是当我尝试使用 entity.name 遍历地图时,它失败了,说没有 get 方法。 这是我的地图:sample_map.vm

#set( $map = {
 "AABUHA": "Name",
 "ABAKTX": "Code",
 "ABABDZ": "Date"
 }

我在我的模板中这样解析它:

#parse("include/sample_map.vm")

这就是我尝试获取相应实体值的方式

$map["${entity.name}"]

我也试过:

($map.get($field.name))

我得到的错误是

$!map.[: no attribute '['

no method get()

令人惊讶的是,当我将值作为硬编码字符串传递时,这工作正常。

有什么建议吗

在 Velocity 中,当映射中不存在键时,会出现错误“: no attribute '['”(或“no method 'get'”)。

因此,我想在您的情况下,您试图获得地图中未定义的“entity.name”。

要检查键是否在映射中定义,您可以使用:$map.containsKey("xx")

参见此处示例:https://doc.telosys.org/templates/velocity-objects#map

您还可以使用:$map.getOrDefault(“key”, "default_value") 如果映射中不存在该键,则获取默认值

从技术上讲,我的第一个答案有效,但如果您需要添加有关实体的特定信息,模板中的“地图”不是最佳选择(此信息应该在模型中)。

所以,我建议在你的模型(在“.entity”文件).

例如:

在“.entity”文件中(带有标签值的标签'OtherName'):

#OtherName("Empl")
Employee
{
id : int { @Id } ;
firstName : string { #MyTag("xyz") } ;
}

在“.vm”文件中:
用法 1:

#if ( $entity.hasTag('OtherName') )
 name : $entity.tagValue('OtherName')
#else
 name : $entity.name
#end

用法 2 - 最简单的(如果实体中没有标签,则使用默认值):

name : $entity.tagValue('OtherName', $entity.name)

注意:从 Telosys 4.0.0 开始,标签在实体级别可用

参见 hasTag()tagValue() :