2

#foreachディレクティブを使用するかなり基本的なVelocityテンプレートを作成しました。実行すると、ログに次のメッセージが表示されます。

[警告]directive.foreach.iterator.nameプロパティは非推奨になりました。Velocity 2.0では($velocityHasNext自体とともに)削除されます。代わりに、$ foreach.hasNextを使用して、今後この値にアクセスしてください。

しかし、問題は、少なくとも明示的に、このプロパティを使用しないことです。ユーザーガイド#foreachに示されているように、基本的な形式でループを使用します。

以下は、このログ警告を生成する単純なコードです。Velocityバージョンは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());

したがって、問題は、この警告がログに記録されるのはなぜですか。また、コードが表示されないようにコードを構造化するにはどうすればよいですか。

4

1 に答える 1

2

directive.foreach.iterator.nameコードではなく、velocity.propertiesファイル内にあるものです。また、下位互換性の理由から、この非推奨の定義はデフォルト構成にまだ存在しています。

警告はforeachディレクティブ自体の初期化中に表示されるため、実行中の何かによってトリガーされることはありません。この警告は無視しても問題ありませんが、これ以上表示したくない場合は、次のようにします。

  1. ロギング レベルを上に上げるWARN
  2. 独自のカスタム プロパティ ファイルをProperties作成するか、作成中のオブジェクトにJava から追加するだけでdirective.foreach.counter.name、 、directive.foreach.iterator.nameおよびの値が空になりdirective.foreach.counter.initial.valueます。
  3. org/apache/velocity/runtime/defaults/velocity.propertiesまたは、クラスパス ディレクトリの速度 jar から抽出し、非推奨の設定を削除します。
于 2012-12-22T04:38:55.397 に答える