我的速度模板有问题。
我必须显示某些产品的图片网址。 我以正确的方式设置变量。在某些情况下,我还没有这个图像,所以我必须隐藏图像并在模板中放置一个空白区域。
我以这种方式编写set变量:
#set ($variantUrl = ${#if(!$product.getOrderFormImage().getUrl()) $!product.getOrderFormImage().getUrl() #else $product.getOrderFormImage().getUrl() #end} )
但是我得到了一个解析错误:
引起:org.apache.velocity.exception.ParseErrorException: 遇到"(" at de.hybris.platform.commons.renderer.impl.VelocityTemplateRe nderer [第403行,第103栏]期待: ...
我在这一行中没有看到任何错误。问题是什么?
答案 0 :(得分:1)
我不确定您是否可以在#if
中嵌套#else
#set
- 至少在Velocity user guide中没有提及它。
当我使用原始表达式时,我收到以下错误:
org.apache.velocity.exception.ParseErrorException: Encountered "#if" at ....
Was expecting:
<IDENTIFIER> ...
如果我重写以使#if
#else
成为顶级声明,例如:
#if( !$product.getOrderFormImage().getUrl() )
#set($variantUrl = $!product.getOrderFormImage().getUrl() )
#else
#set($variantUrl = $product.getOrderFormImage().getUrl() )
#end
这似乎做你想要的,或者至少它编译并没有错误!它也更容易阅读和理解。
就我个人而言,为了便于阅读,我会更进一步,并使用Velocity的shorthand notation作为参考:
#if( !$product.orderFormImage.url )
#set($variantUrl = $!product.orderFormImage.url )
#else
#set($variantUrl = $product.orderFormImage.url )
#end