Velocity中不推荐使用的财产

时间:2012-12-21 16:22:37

标签: java templates velocity

我编写了非常基本的Velocity模板,它使用#foreach指令。当我运行它时,我在日志中收到以下消息:

  

[warn] directive.foreach.iterator.name属性已经存在   弃用。它将被删除(以及$ velocityHasNext本身)   在Velocity 2.0中。相反,请使用$ foreach.hasNext来访问它   从现在开始的价值。

但问题是我不使用此属性,至少是明确的。我只是在其基本形式中使用#foreach循环,完全如user guide中所示。

以下是产生此日志警告的简单代码。速度版本是1.7。

final Properties properties = new Properties();
VelocityEngine velocityEngine = new VelocityEngine();
velocityEngine.init(properties);

StringWriter stringWriter = new StringWriter();
Map<String, Object> velocityVars = new HashMap<>();
List<Date> dates = new ArrayList<>(); 
dates.add(new Date()); 
dates.add(new Date());
velocityVars.put("dates", dates);
VelocityContext velocityContext = new VelocityContext(velocityVars);

String template =
                "foo\n" +
                "#foreach($d in $dates)\n" +
                "  $d\n" +
                "#end \n" +
                "bar";

velocityEngine.evaluate(velocityContext, stringWriter, "blah", template);
System.out.println(stringWriter.toString());

所以问题是 - 为什么会记录此警告,如何构建我的代码以防止它出现?

1 个答案:

答案 0 :(得分:2)

directive.foreach.iterator.name不是代码中的内容,而是velocity.properties文件中的内容。出于向后兼容性的原因,这个已弃用的定义仍然存在于默认配置中。

foreach指令本身初始化期间会显示警告,因此它不会由您正在执行的操作触发。您可以放心地忽略此警告,但如果您肯定不想再看到它,您可以:

  1. 将日志记录级别提高到WARN
  2. 以上
  3. 编写您自己的自定义属性文件,或者只在您正在创建的Properties对象中添加Java,为directive.foreach.counter.namedirective.foreach.iterator.namedirective.foreach.counter.initial.value添加空值。
  4. 或者,从类路径目录中的速度jar中提取org/apache/velocity/runtime/defaults/velocity.properties,并从中删除已弃用的设置。