执行 FreeMarker 时,以下已评估为 null 或缺失

Posted

技术标签:

【中文标题】执行 FreeMarker 时,以下已评估为 null 或缺失【英文标题】:The following has evaluated to null or missing when executing FreeMarker 【发布时间】:2019-07-08 06:01:36 【问题描述】:

我正在使用 FreeMarker(一个免费的基于 Java 的模板引擎,最初专注于使用 MVC 软件架构生成动态网页)来生成一些 html 页面 我有一个带有这段代码的 freemarker 模板:

 Dear $user.firstname $user.surname,</h3>

我已经创建了这段代码来测试它:

public static void main(String[] args) throws IOException, TemplateException 


    class User 

        String firstname;

        public String getFirstname() 
            return firstname;
        

        public void setFirstname(String firstname) 
            this.firstname = firstname;
        





    


    String templateName = "tdk_reminder_ext_body.ftl";

     final Map<String, Object> finalModel = new HashMap<>();

     User user = new User();

     user.setFirstname("firstname");

     finalModel.put("serverName", "local");
     finalModel.put("user", user);



    Configuration cfg = new Configuration(Configuration.getVersion());

    cfg.setDirectoryForTemplateLoading(new File("C:/Work/eclipse-tdk/templates/engine/"));
    cfg.setDefaultEncoding("UTF-8");
    cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

    final freemarker.template.Template freemarkerTemplate = cfg.getTemplate(templateName);

    System.out.println (FreeMarkerTemplateUtils.processTemplateIntoString(freemarkerTemplate, finalModel));



但是当我运行程序时,我得到了这个错误:

FTL stack trace ("~" means nesting-related):
    - Failed at: $user.firstname  [in template "tdk_reminder_ext_body.ftl" at line 34, column 38]
----

【问题讨论】:

【参考方案1】:

您的课程必须是公开的。 See the documentation.

public class User 

    String firstname;

    public String getFirstname() 
        return firstname;
    

    public void setFirstname(String firstname) 
        this.firstname = firstname;
    


【讨论】:

以上是关于执行 FreeMarker 时,以下已评估为 null 或缺失的主要内容,如果未能解决你的问题,请参考以下文章

FreeMarker 模板错误:以下已评估为 null 或缺失 |但不是真的

Freemarker 模板错误

FreeMarker:需要一个哈希,但这已经评估为一个序列

freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above

在更新之前评估查询集

如何使用 Freemarker 模板输出 JSON