空值上的Velocity解析错误

时间:2015-07-06 10:27:11

标签: parsing xml-parsing velocity

我的速度模板有问题。

我必须显示某些产品的图片网址。 我以正确的方式设置变量。在某些情况下,我还没有这个图像,所以我必须隐藏图像并在模板中放置一个空白区域。

我以这种方式编写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栏]期待:        ...

我在这一行中没有看到任何错误。问题是什么?

1 个答案:

答案 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