2012-07-24 51 views
3

我的模板看起來是這樣的:freemarker錯誤:期望的散列。而不是評估,以freemarker.template.SimpleScalar

<#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 情感對象。方法getSentimentTypegetScore存在並正在工作。

那麼,爲什麼我會收到錯誤?

回答

7

With <#assign senti = "${scmr.results[model]}">您已將scmr.results[model]轉換爲String(標量),這就是原因。只需寫<#assign senti = scmr.results[model]>。在FreeMarker表達式中,您可以將值注入字符串文字,如"Hello ${name}!"(與"Hello " + name + "!"相同),"${someExpression}"就是這種情況。這不像在JSP中。

+0

也看到過http://thread.gmane.org/gmane.comp.web.freemarker相同的錯誤。用戶/ 5455 – sds 2012-07-26 13:03:16

0

使用具有ninjaframework昂首闊步生成的模型,通過在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()); 


    } 



} 
相關問題