Templates Velocity模板电话号码格式化

Templates Velocity模板电话号码格式化,templates,formatting,velocity,Templates,Formatting,Velocity,我对Velocity模板非常陌生,尝试将电话号码显示为8位数,如“12345678”或“12345678” 我尝试了很多变化,包括 $number.format('00',${phone}) $number.format('#0 00',$phone) $display.printf(“%s%s%s%s”、$phone.substring(0,2)、$phone.substring(2,4)、$phone.substring(4,6)、$phone.substring(6,8)) 其中$numb

我对Velocity模板非常陌生,尝试将电话号码显示为8位数,如“12345678”或“12345678”

我尝试了很多变化,包括

  • $number.format('00',${phone})
  • $number.format('#0 00',$phone)
  • $display.printf(“%s%s%s%s”、$phone.substring(0,2)、$phone.substring(2,4)、$phone.substring(4,6)、$phone.substring(6,8))
  • 其中$number=newnumbertool()和$display=newdisplaytool()


    这两个函数首先输出不带空格的数字,而最后一个函数不由Velocity解析。

    我现在使用一个单独的类通过MessageFormat进行格式化,并将其放在上下文中:

    $phoneNumber.format($phone)


    我想一定有一种更简单的方法可以直接在模板内完成这项工作。

    方法三可以。错误的是,$phone是代码中的一个数字,substring()将处理字符串。解析模板时,它可能会在代码中打印“null”

    简单的解决方法是将$phone转换为字符串。只需做如下操作:

    #set ($phoneString = $phone.toString())
    $display.printf("%s %s %s %s", $phoneString.substring(0,2), $phoneString.substring(2,4), $phoneString.substring(4,6), $phoneString.substring(6,8))
    
    你就可以走了

    如果您想购买美式手机,请尝试:

    $displayTool.printf("(%s) %s-%s", $phoneString.substring(0,3), $phoneString.substring(3,6), $phoneString.substring(6,10))
    

    无论如何,我喜欢在代码中包含这样的内容,这样更易于测试,并且保持velocity模板的可读性。模板中的代码很快就会变得混乱。