0

Apache Velocity を使用していますが、テンプレートの 1 つがパーサー エラーを引き起こしています。例外の原因となる行は次のとおりです。

 $slider.animate({height: configMap.extendedHeight})
        .attr('title', configMap.extendedTitle);

そして、エラーは

Oct 28, 2013 11:34:50 AM org.apache.velocity.runtime.log.CommonsLogLogChute log
SEVERE: ResourceManager.getResource() parse exception
org.apache.velocity.exception.ParseErrorException: Encountered ")\n                           .attr(\'title\', congifMap.extendedTitle);\n                    return true;\n                } else if(sliderHeight === configMap.extendedHeight) {\n                    " at vml/Slider.vml[line 45, column 71]
Was expecting one of:
"," ...
")" ...
<WHITESPACE> ...

at org.apache.velocity.Template.process(Template.java:151)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:437)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:373)
...

私は VTL 構文に慣れていないので、VTL リファレンス マニュアルでエラーの原因がわかりません。

http://velocity.apache.org/engine/devel/vtl-reference-guide.html

これの原因と修正方法を知っている人はいますか?前もって感謝します!

4

2 に答える 2

1

どうやらVelocity 1.7以降、#[[ ]]#ディレクティブを使用してレンダリングからブロックを除外できます。この場合、1つの解決策は

#[[
<script type="text/javascript">
    var Slider = (function () {
        var configMap = {
            extendedHeight: 434,
            extendedTitle: 'Click to retract',
            retractedHeight: 16,
            retractedTitle: 'Click to expand',
            templateHtml: '<div class="slider"></div>'
        }, $slider, toggleSlider, onClickSlider, initModule;
        toggleSlider = function () {
            var sliderHeight = $slider.height();
            if(sliderHeight === configMap.retractedHeight) {
                $slider.animate({height: configMap.extendedHeight})
                       .attr('title', configMap.extendedTitle);
                return true;
            } else if(sliderHeight === configMap.extendedHeight) {
                $slider.animate({height: configMap.retractedHeight})
                       .attr('title', configMap.retractedTitle);
                return true;
            }
            return false;
        };
        onClickSlider = function (event) {
            toggleSlider();
            return false;
        };
        initModule = function ($container) {
            $container.html(configMap.templateHtml);
            $slider = $container.find('.slider');
            $slider.attr('title', configMap.retractedTitle)
                   .click(onClickSlider);
            return true;
        };
        return {initModule: initModule};
    })(jQuery);
    jQuery(document).ready(
        function () {
            Slider.initModule(jQuery('#slider'));
        }
    );
</script>
]]#

ただし、これは最初のエラーが実際に何であったかという質問の最初の部分にはまだ答えていません。

于 2013-10-28T20:54:12.603 に答える
0

$slider が JavaScript 変数の場合、同じく $: で始まる Velocity 変数と競合し、解析エラーの例外が発生する可能性があります。

別の言い方をすると、Velocity はこのテンプレートを解析して、エンジンから $slider 値を取得しようとします。

于 2013-10-28T19:08:08.063 に答える