空值上的速度解析错误

Velocity parse error on a null value

我的速度模板有问题。

我必须显示某些产品的图片 url。 我以正确的方式设置了一个变量。无论如何,在某些情况下我没有这张图片,所以我必须隐藏图片并在模板中放置一个空白 space。

我这样写set变量:

#set ($variantUrl = ${#if(!$product.getOrderFormImage().getUrl()) $!product.getOrderFormImage().getUrl() #else $product.getOrderFormImage().getUrl() #end} )

但我得到一个解析错误:

Caused by: org.apache.velocity.exception.ParseErrorException: Encountered "(" at de.hybris.platform.commons.renderer.impl.VelocityTemplateRe nderer[line 403, column 103] Was expecting: ...

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

我不确定您是否可以在 #set 中嵌套 #if #else - 至少 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