我正在为我的工作开展一个网络项目,我正在尝试通过单击模板一侧的复选框向页面添加Google调查。此方法的原因是将脚本添加到所有模板,但能够在特定页面上关闭/打开它。如果选中,则显示调查。如果没有,请不要显示调查结果。
我的XSD架构布尔代码是:
<xs:element name="ShowSurvey" type="xs:boolean"/>
这是要在发布商的模板端呈现的复选框。
我的FTL代码是:
<#if !Page.ShowSurvey>
<script type="text/javascript" async="" defer="" src="//survey.g.doubleclick.net/async_survey?site=#############"></script>
</#if>
当我重新生成模板时,收到以下错误消息:
使用TemplateName.ftl重新生成再现错误:freemarker.core.NonBooleanException:第13行错误,第23行,freemarker_template期望布尔(true / false)表达式,表达式Page.ShowSurvey不评估为true / false它是一个freemarker.ext.dom.NodeListModel的实例
我做错了什么?任何人都可以对此有所启发吗?
提前致谢。
答案 0 :(得分:1)
FreeMarker的XML包装器不支持XSD,因此你有一个像"true"
这样的字符串,而不是布尔值。所以你必须自己将它转换为boolean。类似<#if !xsdBool(Page.ShowSurvey)>
的地方xsdBool
:
<#function xsdBool s>
<#if s == 'true' || s == '1'><#return true></#if>
<#if s == 'false' || s == '0'><#return false></#if>
<#stop "Malformed XSD boolean: " + s>
</#function>