freemarkerテンプレートをいくつかのルールで前処理する方法があるのかどうか疑問に思っていました。実際には指示や方法ではない構文糖を追加したいと思います。インスタンスFoのFreemarker - テンプレート前処理
私はこのように印刷する変数、持っている:
明らか${item.getLocale(currentLocale).name}
${item.getLocale(currentLocale).text}
${item.parent.getLocale(currentLocale).name}
${item.parent.getLocale(currentLocale).text}
を、getLocale
構築物は、式全体はかなり醜いなります。私は何を達成したいことは書くことができるようにすることです。
${item.l.name}
${item.l.text}
${item.parent.l.name}
${item.parent.l.text}
すべて.l.
が.getLocale(currentLocale)
に書き換えコンパイル時になるように。
これを行うには良い方法がありますか?ありがとう!
実際のケースでは、この '.l.'も同様に使用したいさまざまな種類のコレクションがアイテムに含まれている可能性があるため、これが解決策かどうかはわかりません。私はまだ初期化されていないかもしれないすべての内部オブジェクトをトラバースする必要があります。 'item.parent.parent.parent.parent.l.name'を考えてみましょう。私はテンプレートの前処理がより簡単な解決策かもしれないと思う。 –
あなたの例の最後の 'parent'はまだ' getLocale'メソッドを持っていますね。私はあなたが特別にラップできるいくつかの 'Interface'または' Class'から来ていると思います。その前に何個の '親 'が存在しているのかは特別なことではありません。なぜなら、(通常は)あなたはすべて同じオブジェクトラッパーを使用するからです。あなたが 'HashMap'、' List's、配列などを通っているとは言いませんが、ルートオブジェクトのラッパーはまだ見ています。 – ddekany