-ELResolver
JspApplicationContextというインターフェイスのドキュメントを読むと、以下の順にJSP標準のELResolverは並びます。
- javax.servlet.jsp.el.ImplicitObjectELResolver
- APIを通じて追加したELResolver。追加順に並ぶ(どっちが上?ドキュメントからは不明)
- javax.el.MapELResolver
- javax.el.ListELResolver
- javax.el.ArrayELResolver
- javax.el.BeanELResolver
- javax.servlet.jsp.el.ScopedAttributeELResolver
これらは、javax.el.CompositeELResolverに内包されてひとつのELResolverのように見えます。この仕組み、微妙にOGNLと合わない。。。VariableResolverでルートオブジェクトのようにやってくれたJSF1.2だとやりようがあったのですが。。。リストにELResolverを並べて、順に解決できるかを聞いていくという今回の仕様ですが、OGNLは型で適切なPropertyAccessorを探すという作りになっています。たぶん、java.lang.ObjectのPropertyAccessorを上書きして、その上書きAccessorの中にELResolverを並べるイメージになるかな。だと以下の感じ
- Root implements java.util.Map
上記がルートオブジェクトで、
- ELResolverPropertyAccessor
- APIを通じて追加したELResolver
- OGNLのほかのAccessor
こちらがAccessor。S2ContainerELResolverというものを作ったとすると、Rootのほうでのみ意味があるのですが、どうするかな。MayaのEL仕様として、JSF1.2のVariableResolverのような機能のELResolverしか許さないという手もある。