如果没有在VelocityContext中找到任何值,Velocity只打印标签名称,即我的模板文件中的$ name,但VelocityContext中没有“name”的值,所以只打印了“$ name”。我希望Velocity在没有变量值的情况下打印默认值,我只是尝试扩展AbstractCotnext并覆盖internalGet()方法,但是internalGet()的返回值将被强制转换为Node对象,我不知道如何在我的internalGet()方法中创建一个新的Node对象,而且我认为这种方式非常复杂。
是否有一种设置默认值的简单方法(默认值只是一个字符串)?
感谢。
答案 0 :(得分:18)
据我所知,对于所有变量都不容易,我只是设法对某些变量进行了具体操作,具体如下:
模板:
#if ( !$somevar )
#set ( $somevar = "mycontent" )
#end
Var is: $somevar
结果:
Var is: mycontent
答案 1 :(得分:8)
在模板中创建一个velocimacro:
#macro(defaultValue $parm)
#if (!$!parm || $!parm == "")
i-like-will
#else
$parm
#end
#end
并在同一模板中将其称为:
#defaultValue($name)
检查Apache Velocity - Velocity User Guide以获取有关velocimacros(以及一般速度)的更多信息。
答案 2 :(得分:2)
谷歌围绕Velocity ReferenceInsertionEventHandler寻求广泛的做法。
考虑DisplayTool的各种情况的alt()方法(VelocityTools项目的一部分)
答案 3 :(得分:2)
派对迟到了,但你也可以在定义变量时进行检查。我不得不将其压缩到一行以删除输出中的多余空间,但这是我的一个项目的示例:
#set ( $qlDefault = "qlinks" )
#set ( $qlClass = "#if($sharedCtaImage.getChild('path').value != '/')$qlDefault#else$qlDefault full#end" )
定义了默认类,然后检查是否填写了另一个特定值,以确定我是保留默认类还是追加其他类。这也适用于交换课程。
答案 4 :(得分:0)
对于空的默认值,$!name
会这样做。否则,
#{if}($name)${name}#{else}${default_value}#{end}
请参阅http://velocity.apache.org/engine/2.0/user-guide.html#quiet-reference-notation
答案 5 :(得分:-1)
你可以做一些事情,而不是黑客攻击速度内部。看看this question。