如何将字符串传递给NVelocity模板中的函数?

时间:2009-01-09 11:19:22

标签: string nvelocity padleft

我正在使用 NVelocity Templating engine 来生成固定长度字段输出 - 您知道的事情:

Field        Start Pos   Field Length  Notes
----------   ---------   ------------  ---------
Supplier      1           7            Leading Zeros
GRN           8           9            -
...

e.g.
>0001234    123A<

问题是我正在尝试使用重载来调用String.PadRight()以指定前导零,而NVelocity没有它。

这有效:

$Document.SupplierCode.PadRight(7)

但这不是:

$Document.SupplierCode.PadRight(7,"0")

我试过了:

  • 单引号('0'

  • 双单引号(''0''

  • 双引号("0"

  • Double Double-Quotes(""0""

  • 转义以上所有内容的引号(\"0\"

  • 没有引用!

我发现的所有工作都是NVelocity Homepage,而Velocity Templating Language Reference page,其他人指的是解决方案。

抱歉,我无法提供或指出您可以自行测试您的想法的地方,但欢迎您提出任何建议!

感谢您的帮助; o)

2 个答案:

答案 0 :(得分:1)

我现在正在处理同样的问题,据我所知,这是因为String类的PadLeft和PadRight函数接收第二个参数,前导“0”,作为char,而不是作为一个字符串。

NVelocity允许您使用'0'将参数指定为字符串,但在内部以这种方式生成强制转换异常(或类似的东西),因为参数预期为char。

我还没有找到(我只是在1小时后使用NVelocity!)一种将参数指定为char的方法,目前我只有一个肮脏的解决方案,例如应用替换(“”,“0 “)在PadLeft / PadRight之后,模板变为

$ Document.SupplierCode.PadRight(7).Replace('','0')

答案 1 :(得分:0)

同事提出的一个解决方案是在Document对象中创建另一个返回格式化String的属性:

E.g。

Public ReadOnly Property SupplierCodeFormatted() As String
    Get
        Return Supplier.Code.PadLeft(7, "0")
    End Get
End Property