有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

读取导致Freemarker模板引擎中TemplateException的Java对象

我正在编写一个Java实用程序,使用freemarker模板生成输出文件。我有一个使用freemarker写入文件的对象列表。例如,我的java对象是一个有fName、lName和age的雇员。我使用以下代码段生成输出文件:

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

现在,我正在使用一个自定义模板异常处理程序,在employee对象中缺少fName、lName或age时处理异常

configuration.setTemplateExceptionHandler(new FreemarkerExceptionHandler());

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

TemplateHashModel templateHashModel = environment.getDataModel();

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

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


共 (1) 个答案

  1. # 1 楼答案

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