velocity:使用分隔符/前缀加入可选字段

时间:2013-10-18 09:52:31

标签: java templates velocity prefix separator

速度模板中最简洁/可读的方法是使用分隔符连接多个字段,同时在不添加多余分隔符的情况下省略空字符串或空字符串?

作为一个例子,我们有一个工具提示或约会,如:

Appointment ($number) [with $employee] [-] [$remarks] [-] [$roomToVisit]

我用括号表示可选数据。填写时通常显示为

Appointment (3) with John - serve Java coffee - ballroom

当$ remarks为空但$ roomToVisit不为时,会变为:

Appointment (3) with John - ballroom

当$ roomToVisit为空时我们得到:

Appointment (3) with John - serve Java coffee

当两者都是空的时候:

Appointment (3) with John

奖励:还可以将字段前缀设为可选。当只有$ employee为空时我们应该得到:

Appointment (3) serve Java coffee - ballroom

理想情况下,我希望速度模板看起来与第一个代码框非常相似。如果这是不可能的,那么如何通过最少的令人分心的代码标签实现这一目标呢?

类似的想法(速度示例可能会有所帮助,但更加冗长):

1 个答案:

答案 0 :(得分:0)

我发现您可以通过在上下文中将Java类注册为工具来调用自己的Java方法。现有示例是DisplayTool。我使用方法“pre”和vararg方法“join”创建一个VelocityStringUtil类,用于条件前缀和连接,并将其注册为:

context.put("text", new VelocityStringUtil());

使用此选项,以下模板将创建预期输出:

Appointment ($number)$text.pre(' ', $text.join(' - ', $text.pre('with ', $employee), $remarks, $roomToVisit))

你可以看到它仍然有点难看,但我认为它比使用预定义的指令更好(除非我遗漏了一些东西)。