【问题标题】:Read Java Object that leads to TemplateException in Freemarker template engine在 Freemarker 模板引擎中读取导致 TemplateException 的 Java 对象
【发布时间】:2019-09-04 13:13:40
【问题描述】:

我正在编写一个 Java 实用程序来使用 freemarker 模板生成输出文件。我有一个使用 freemarker 写入文件的对象列表。例如。我的 java 对象是具有 fName、lName 和年龄的员工。我正在使用以下代码 sn-p 生成输出文件:

<#list employees as e>
Fname: ${e.fName} Lname: ${e.lName} Age: ${e.age}
</#list>

现在,我正在使用自定义模板异常处理程序来处理异常,以防员工对象中缺少 fName、lName 或 age。

configuration.setTemplateExceptionHandler(new FreemarkerExceptionHandler());

我想读取在 FreemarkerExceptionHandler 类中引发异常的员工对象,但我无法读取它。我正在使用以下代码来读取员工列表,但我正在获取所有员工,而不是导致此错误的特定员工。

TemplateHashModel templateHashModel = environment.getDataModel();

TemplateModel templateModel = templateHashModel.get("employees");
List<Employee> emps = simpleSequence.toList();

任何人都可以确认这在freemarker中是否可行以捕获导致异常的对象。

【问题讨论】:

    标签: java freemarker


    【解决方案1】:

    据我所知,没有简单的方法可以做到这一点。我的想法是扩展DefaultObjectWrapper(假设您正在使用它 - 请参阅Configuration.getObjectWrapper),因此当通过TemplateHashModel.get(String) 获取子变量(如fNameo)时,您可以在覆盖中捕获super.get(String) 抛出的任何异常TemplateHashModel.get,然后抛出您自己的 TemplateException 子类实例,您将父对象放入为此添加的字段中。 (而且您可能还想将原始异常添加为异常的原因异常。)

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 2012-11-01
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2018-10-29
      • 2021-01-27
      • 2011-02-23
      相关资源
      最近更新 更多