web-dev-qa-db-ja.com

FreeMarkerテンプレートからオブジェクトのJavaメソッドを呼び出すにはどうすればよいですか?

Freemarkerテンプレートからパラメーターを取得するメソッドを呼び出すことは可能ですか?

Freemarkerを使用してWebページにレンダリングしようとしているオブジェクトモデルがあります。オブジェクトの1つには、そのコンテンツのサブリストを取得するメソッドがあります-リストのフィルターに使用されるパラメーターを取得します。

public List getunits(final String type);

JSPではこれを直接行うことはできませんが、目的の結果を達成できるカスタム関数を作成できます。 Freemarkerでこれをどのように解決しますか?カスタム関数を書いても同じですか?または、この種の関数を実際に呼び出す方法はありますか?

42
Graham

FreeMarkerでは、 expressions 内からモデルを介して使用可能にされたメソッドを呼び出すことができます。

オブジェクトがmyBeanとして公開されていると仮定すると、次のようにメソッドを呼び出すことができます。

<#list myBean.getunits("myType") as unit>
  do stuff with ${unit}
</#list>

<list>を使用する必要はありません。もちろん、メソッドがリストを返すため、例としてあります。

36
ChssPly76

ChssPly76が言ったように、モデル内のオブジェクトを公開する限り、Freemarkerテンプレート内からメソッド呼び出しを実行できます。

ただし、メソッドが(何らかの理由で)NULLを返す場合、混乱を招くことに注意してください

_Expression myBean.getunits() is undefined on line ....
_

これを回避するには、myBean.getunits(...)!(感嘆符に注意)を使用することをお勧めします。

Freemarkerがnullを処理する方法の詳細については、こちらをご覧ください。 http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing

22
monzonj