0

我正在为我的工作开发一个网络项目,并且我正在尝试通过单击模板侧的复选框来将 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:freemarker_template 中的第 13 行第 23 列出现错误在这里期望布尔(真/假)表达式 Expression Page.ShowSurvey 不会评估为真/假,它是 freemarker 的一个实例.ext.dom.NodeListModel

我究竟做错了什么?任何人都可以对此有所了解吗?

提前致谢。

4

1 回答 1

1

FreeMarker 的 XML 包装器不支持 XSD,因此您有一个类似"true"那里的字符串,而不是布尔值。因此,您必须自己将其转换为布尔值。类似<#if !xsdBool(Page.ShowSurvey)>where的东西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>
于 2013-09-21T10:26:17.373 回答