FLT无法验证XSD布尔值

时间:2013-09-20 14:47:33

标签: xml xsd boolean freemarker

我正在为我的工作开展一个网络项目,我正在尝试通过单击模板一侧的复选框向页面添加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的实例

我做错了什么?任何人都可以对此有所启发吗?

提前致谢。

1 个答案:

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