0

私は自分の仕事のために Web プロジェクトに取り組んでおり、テンプレート側のチェック ボックスをクリックして、ページに 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 列目のエラー ここでブール値 (true/false) 式が必要です Expression Page.ShowSurvey は true/false に評価されません。これは freemarker のインスタンスです.ext.dom.NodeListModel

私は何を間違っていますか?誰かがこれに光を当てることができますか?

前もって感謝します。

4

1 に答える 1

1

"true"FreeMarker の XML ラッパーは XSD に対応していないため、ブール値ではなく、そのような文字列があります。したがって、自分でブール値に変換する必要があります。次のようなもの<#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>
于 2013-09-21T10:26:17.373 に答える