4

我的模板如下所示:

  <#assign senti = "${scmr.results[model]}">
    <#if senti??>
      <td>${senti} ---- ${senti.sentimentType}</td>
      <td>${senti.score?html}</td>
    </#if>

输出如下所示:

POSITIVE(1.0/1) ---- Expected hash. senti evaluated instead to freemarker.template.SimpleScalar on line 5, column 27 in com/addthis/sentiment/sentidemo.ftl.

“----”之前的输出文本表明senti确实是一个有效的 java Sentiment对象。方法getSentimentTypegetScore存在并且有效。

那么,为什么我会收到错误消息?

4

2 回答 2

7

随着<#assign senti = "${scmr.results[model]}">您已转换scmr.results[model]为字符串(标量),这就是原因。就写吧<#assign senti = scmr.results[model]>。在 FreeMarker 表达式中,您可以将值注入到字符串字面量中,例如"Hello ${name}!"(same as "Hello " + name + "!"),"${someExpression}"这只是其中的一种情况。这不像在 JSP 中。

于 2012-07-25T09:04:19.393 回答
0

使用带有 ninjaframework 的 swagger 生成的模型时出现相同的错误,通过在 conf 包中添加以下类来修复

package conf;

import com.google.inject.Inject;
import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.beans.MethodAppearanceFineTuner;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapperBuilder;
import ninja.NinjaDefault;
import ninja.template.TemplateEngineFreemarker;

/**
 * Created by varya on 07/12/17.
 */
public class Ninja extends NinjaDefault {
    @Inject
    protected TemplateEngineFreemarker templateEngineFreemarker;

    @Override
    public void onFrameworkStart() {
        super.onFrameworkStart();

        Configuration freemarkerConfiguration = templateEngineFreemarker.getConfiguration();
        DefaultObjectWrapperBuilder owb = new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_23);
        owb.setMethodAppearanceFineTuner(new MethodAppearanceFineTuner() {
            @Override
            public void process(BeansWrapper.MethodAppearanceDecisionInput in, BeansWrapper.MethodAppearanceDecision out) {
                out.setMethodShadowsProperty(false);
            }
        });

        freemarkerConfiguration.setObjectWrapper(owb.build());


    }



}
于 2017-12-07T10:43:37.523 回答