Freemarker忽略缺失的变量

时间:2017-11-16 11:07:29

标签: java variables exception-handling freemarker

我使用freemarker生成文件,而且我正在使用templateExeptionHandler部分。我的模板中的变量不必替换(如果它们不存在于数据模型中)。我不想把这些变量放在我的数据模型中,并且具有相同的值(也不能让它工作)我知道我可以'escape' variables in the template itself但我不是真的喜欢那个解决方案。

MyTemplateExceptionHandler如下所示:

class MyTemplateExceptionHandler implements TemplateExceptionHandler {
public void handleTemplateException(TemplateException te, Environment env, Writer out) throws TemplateException {
  try {
    out.write("${" + te.getBlamedExpressionString() + "}");
  } catch (IOException e) {
    throw new TemplateException("Failed to print error message. Cause: " + e, env);
  }
}

}

问题是,一旦我以下列形式解析变量:

  

$ {workflow.input.myVariable}

我新生成的文件中的结果只显示了此变量的第一部分:

  

$ {工作流}

有关如何获取完整变量并在生成的文件中返回的任何想法?

1 个答案:

答案 0 :(得分:1)

至少从2.3.27开始,不支持该用例。它甚至不清楚它应该如何工作,比如,如果缺失的变量是指令的参数怎么办?当然,它只能在${}的情况下解决(即使这样,只有当它出现在字符串文字之外时),但我不确定是否满足了需要,或者它只是诱使使用它然后他们用一个指令参数打了一个墙...(或者,另一个棘手的案例,${thisIsMissing + thisExists}是什么?我猜它应该变成${thisIsMissing + 123}之类的东西。所以这样做可以使核心复杂化。)