Java Freemarker忽略缺少的变量

Java Freemarker忽略缺少的变量,java,variables,exception-handling,freemarker,Java,Variables,Exception Handling,Freemarker,我正在使用freemarker生成文件,而TemplateExceptionHandler部分正处于困境。我的模板中有不必替换的变量(如果它们不在数据模型中)。我不喜欢用相同的值将这些变量放入我的数据模型中(也不能让它工作),我知道我可以,但我真的不喜欢这种解决方案 MyTemplateExceptionHandler如下所示: class MyTemplateExceptionHandler implements TemplateExceptionHandler { public void h

我正在使用freemarker生成文件,而TemplateExceptionHandler部分正处于困境。我的模板中有不必替换的变量(如果它们不在数据模型中)。我不喜欢用相同的值将这些变量放入我的数据模型中(也不能让它工作),我知道我可以,但我真的不喜欢这种解决方案

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}

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

${workflow}


关于如何在生成的文件中返回完整变量,您有什么想法吗?

至少从2.3.27开始,不支持该用例。甚至不清楚它应该如何工作,比如,如果缺少的变量是指令的参数,该怎么办?当然,它只适用于
${}
的情况(即使如此,也只适用于它出现在字符串文本之外的情况),但我不确定这是否满足了需要,或者它只是诱使用户使用它,然后他们用一个指令参数撞上了墙。。。(或者,另一个棘手的情况是,
${thisIsMissing+thisExists}
?我想它应该变成类似于
${thisIsMissing+123}
…这样做会使核心相当复杂。)