尝试按实体名称获取时地图不起作用
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() :
我正在使用 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() :