(背景:私はオフとオンのどこかの周りの18年間のJava Beanと取り組んできた、私は:-)週または2のためにFreemarkerので取り組んできました)FreemarkerはMethodDescriptorsを尊重しますか?
私が持っている手箔押しBeanInfo
メソッドの命名の "普通の"(しかし明らかに任意の)get
/set
スタイルに従わないクラスのプロパティを表す。
意味的に、x
という名前のJava Beanプロパティの場合、このクラスのメソッドx()
を呼び出します。
私のBeanInfo
の実装(Freemarkerが見つけて読み込んでいる)はこのパターンを実装しています。ファイン。問題の
クラスは、実際に方法は(のはここTarget
それを呼びましょう)特定のオブジェクトを返す、target()
と呼ばれ、その名前がtarget
とreadMethod
その方法であるPropertyDescriptor
で表されています。ファイン。私Freemarkerのテンプレートで
、私がしなければ、この:
theObject.target
技術的に発見できるのに...私は、私のPropertyDescriptor
ことを示唆し、効果的方法、ない財産であるtarget
というエラーを取得し、相談されていません。代わりにこれを変更すると:
theObject.target()
...すべてが動作します。換言すればFreemarkerがFreemarkerの手法で見ているように思われます。FreemarkerはPropertyDescriptor
に「通過」していないようです。そうしないと、実際にはJava Beanプロパティの「読み取りメソッド」です。 。
私は、おそらくそれが問題だったことを考え、MethodDescriptors
の空のリストを返すために、私のBeanInfo
を編集してみました:あなたはBeanInfo
で特定のメソッドからnull
を返すならば、Introspector
はそのことのために低レベルのイントロスペクションを行います。デフォルトはnull
です。したがってnull
をBeanInfo#getMethodDescriptors()
から返すと、Introspector
はクラス内のすべてのパブリックメソッドを見つけ、MethodDescriptor
を作成します。
とにかく、私は、私は方法としてtarget
を「見て」いないにFreemarkerのを強制することができることを期待して、MethodDescriptor
Sの空のリストを返しますが、Javaの豆プロパティとして(私のBeanInfo
のPropertyDescriptor
ように「通って落ちます」上記の通り)。これはうまくいかなかった。要するに
、どのように私は私の作ることができます。
someObject.target
...呪文のアクセス私のプロパティ記述子ではなく、target()
方法?
['MethodAppearanceFineTuner'](http://freemarker.org/docs/api/freemarker/ext/beans/MethodAppearanceFineTuner.html)クラスが私をここで助けてくれるようです。 –