java - Freemarker 忽略缺失变量

标签 java variables exception 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}

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

${workflow}

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

最佳答案

至少从 2.3.27 开始,该用例不受支持。甚至不清楚它应该如何工作,例如,如果缺少的变量是指令的参数怎么办?当然,仅针对 ${} 的情况可以解决(即使如此,仅当它出现在字符串文字之外时),但我不确定这是否满足了需求,或者它只是引诱使用它,然后他们稍后使用指令参数碰壁...(或者,另一个棘手的情况,${thisIsMissing + thisExists}是怎么回事?我想它应该变成类似的东西${thisIsMissing + 123}...所以正确执行此操作会使核心变得相当复杂。)

关于java - Freemarker 忽略缺失变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47328088/

相关文章:

java - 为什么 getRemoteHost() 在部署应用程序时返回 IP 地址?

JavaScript 和 php 一段时间后停止工作,只有在重命名一些变量时才有效

hadoop - 使用Drillbit.sh的Apache Drill启动NoSuchMethod异常(Jackson JsonFactory)

java - EJB 3.0 如何包装异常以便客户端可以处理它?

c++ 带有静态变量的静态函数的奇怪行为

java - 读取和写入(序列化)不同类中的静态嵌套类对象

java - 如何在谷歌地图上添加和检索地点

java - 字符串中的小写和大写

java - 如何在axis2-java2wsdl-maven-plugin中指定地址位置?

javascript - JavaScript 中相同的输入,不同的输出?