【问题标题】:properties variable setting with velocity带速度的属性变量设置
【发布时间】:2014-01-21 10:15:09
【问题描述】:

在搜索过程中,我想确认一下:

我想将属性变量设置为速度变量类型:

#set($infos.get("trackerData").get(0).get("info_suivi")=tracking.status)

我的属性文件包含:

tracking.status.liv=livré
tracking.status.env=envoyé
tracking.status.cmd=commandé
tracking.status.err=erreur
tracking.status.ann=annulé

$infos 是一张地图

语法正确吗?

谢谢。

【问题讨论】:

    标签: velocity properties-file


    【解决方案1】:

    #set 的主要用例是为变量赋值:

    #set ($variable = 'value')
    

    仅适用于较新版本的 Velocity 的辅助用例是为对象属性分配值,如果这些属性有设置器(即对象是一个简单的 bean):

    #set ($object.property = 'value')
    ## Same as:
    $object.setProperty('value')
    

    通过一些 Velocity 魔法,这也适用于地图和索引列表:

    #set ($map = {})
    #set ($map.key = 'value')
    $map
    ## Same as:
    $map.put('key', 'value')
    ## ...except that it doesn't print the previous value stored in the map
    
    #set ($array = ['original'])
    #set ($array[0] = 'changed')
    $array
    ## Same as:
    $array.set(0, 'changed')
    ## ...except that it doesn't print the previous value stored in the array
    

    但它永远无法将一个值分配给另一个值。 $infos.get("trackerData").get(0).get("info_suivi") 以 getter 结尾,因此它会返回一个值。在几乎所有编程语言中,将一个值分配给另一个值是不可能的。

    其次,无论$something是什么,#set ($something = tracking.status)都是无效的。如果你尝试它会给出一个语法错误。除了它知道的极少数关键字提供的功能外,Velocity 没有任何本机功能:#foreach 用于迭代变量,#if 用于测试变量,#set 用于更改变量,以及其他一些没有t 真正处理变量。属性文件是否应该用作本地化资源?然后您需要将它们加载到ResourceBundleProperties 对象中,将该对象放在VelocityContext 中,然后通过调用用于基于键获取值的Java 类的方法来使用它。 getString('key') 对应 ResourceBundleget('key') 对应 Properties 对象。

    第三,属性文件有以tracking.status为前缀的键,tracking.status本身并不是一个实际的属性。您如何获得实际状态?您是否真的试图通过在info_suivi 属性后面加上tracking.status. 前缀来获取密钥后面的消息?然后,假设属性文件通过$messages 公开,这应该可以工作:

    $messages.getString("tracking.status.${infos.get('trackerData').get(0).get('info_suivi')}")
    

    如果您想将其存储在变量中而不是直接打印:

    #set ($infoSuivi = $messages.getString("tracking.status.${infos.get('trackerData').get(0).get('info_suivi')}"))
    

    【讨论】:

    • 非常感谢塞尔吉乌!
    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多