[Seasar-user:1252] Re: Mayaの式言語サポート(Re: Mayaドキュメント初稿第2版)

Masataka Kurihara kurihara
2004年 11月 30日 (火) 22:24:02 JST


栗原です。

  メールが読めました。

> としてはおそらくMayaが式言語解釈エンジンに式言語記述を渡して解釈結果を受け
> 取るようになっていて、そのためのインタフェースが用意されていて、そのインタ
> フェースの実装クラスを作っておいてweb.xmlなどに「式言語の解釈にはこの実装ク
> ラスを使う」と記述することで式言語エンジンを容易に差し替え可能になるのだろ
> うと考えました。

  そのとおりに考えております。
  インターフェイスについては、JSP2.1やJSF1.2といった将来仕様のJSRを
眺めたところです。JSP2.1の式言語のインターフェイスが相当充実しそうな
一方、何も具体的な情報が無い、しかし明日にも何かが出てきてもおか
しくないところなので、悩んでます。不明なものはしょうがないのと、
VariableResolverやExpressionEvaluatorがJSPカスタムタグから
PageContextを通して見えることもあるので、既存JSPカスタムタグ対応
のために、JSP2.0の式言語でやっておいて、後々に2.1相当にインターフェイ
スに移行するように案を作ろうと思います。
  しかし、テンプレートの書き方と式言語ブロックの解釈方法はMaya内で
独自の仕様でもよく、需要が明確であれば、これから作るものなので良い
方向にどのようにもできるわけです。横田さんがご希望されているとおりです。

> これが例えば「{」と「}」のバランスを考慮して切り出してくれるですとか、「"」
> から「"」までの間を切り出してくれるですとか、そのようになっているのでしたら
> うれしいのです。

  「"」で囲われた範囲全部を切り出すというのは、ボディ部に記述された
式言語を考慮していないので、記述される箇所に応じて式言語ブロックの
挙動が変わるという問題があります。そこに対応策はいらないのでしょうか?
  
  一方で、「${」と「}」のネストを見る仕組みになると、ネスとされる式言語に
対して、どう評価結果を渡すかを考えなければなりません。例の

${(this#)${type}.name}

  で、まず評価は、typeを評価します。その結果を外側の式言語にどう
埋め込むかがわかりません。文字列にしてしまっていいのであればそういう
実装も作れないこともないかと思いますが、${ type } をtoString()やコン
バーターで単なる文字列に変換してしまってOKなのでしょうか?

  ジャストアイディアですが、私の提案する解決策は、式言語を、

${(this#)#{type}.name}
${(this#)@{type}.name}
${(this#){type}.name}

という風に書くことです。「#{  }」じゃなく「@{  }」でも、単に「{  }」でも
いいです。Mayaは${ }で囲まれているところを式言語としますので、
「{  }」のネストだけをきちんとみれば、切り出すELは

(this#)#{type}.name

となります。あとは、#{  } を式言語エンジンのほうで対応いただくことで
できるかと思います。いかがでしょうか?JSFのほうもそういう対応です。

  蛇足ですが、JSFの式言語は「#{  }」で囲うことによってJSPでは単
なる文字列の一部となり、属性値をJSPカスタムタグ->JSFのUIコン
ポーネント->JSFのApplication、とスルーで持って行きます。

  またさらに蛇足としては、JSP2.1の存在が悩ましいです。JSR文書の
中に、

「ability to defer expression evaluation until a time of a tag
handler's choosing 」

とあります。JSFの式言語も「${  }」でやって、たとえばTLDの宣言など
によってスルーで背後に送るのか、JSPプロセッサで評価するのか、また
評価をJSPでする場合に限っても、それはレンダリング時だけか、JSFの
コンポーネントツリーの構築のときも評価するか、などのことを制御する
ということになりかねないなと。JSP2.1で式言語評価の仕様が変われば、
JSP2.1対応のカスタムタグがいずれ出てくることを考慮すると、Mayaで
もJSP2.1スペック対応していくことになると思います。

  ということで、明日早いので風呂入って、寝ます。おやすみなさい。
次は明日のお昼ごろに。。。

--
株式会社グルージェント
栗原 傑享(くりはら まさたか)
渋谷区渋谷3-7-6 第6矢木ビル4F
TEL:03-5469-8869 FAX:03-5469-8879
URL:http://www.gluegent.com/
--


> 横田です。
> 
> On Tue, 30 Nov 2004 12:47:27 +0900
> Masataka Kurihara <[E-MAIL ADDRESS DELETED]> wrote:
> 
> > 栗原です。
> 
> 回答ありがとうございます。
> 
> >   記述の入れ子構造は考えていません。JSPの式言語の記述仕様に
> > 準じています。${ }がネストするのは実現難しいと思います。
> 
> そうですか、それは残念です。
> 
> >   上記で要件を満たしているのか不明ですが、もし足りないようでし
> > たら詳細教えてください。
> 
> 私が開発しているKvasir/Soraというアプリケーションサーバ的CMSがありま
> して、これではコンテンツをディレクトリ構造に配置しておき、コンテンツ
> にリクエストがあった場合にはそのコンテンツに対応するテンプレートに従っ
> てHTMLをレンダリングしてレスポンスとして返すようになっています。
> 
> それでテンプレートの形式として何種類かの書式(JSP、Velocity、独自形式
> など)をサポートしているのですが、将来的にはMayaをテンプレート形式の
> 1つとしてサポートしたいと考えています。
> 
> ところで、Kvasir/Soraは独自の式言語体系を持っていて、Mayaテンプレート中
> にもこの式言語を書けるようにしたいと思っています。この式言語はKvasir/Sora
> の機能を容易に利用できるよう特殊な書式になっていまして、ネストした記述も
> できるようになっています。意味は抜きにして例を書きますと、
> 
>   ${(this#)${type}.name}
> 
> のような感じです。
> 
> Mayaのドキュメントに「${   }で囲った値は、式言語として評価されます。式言語
> はデフォルトでOGNLをサポートしますが、ELなど他の式言語やスクリプト言語もサ
> ポートできる構造になっています。」とありましたので、ひょっとして上記のよう
> な独自言語を利用できるようにカスタマイズできるかな、と考えたのですが、仕組み
> としてはおそらくMayaが式言語解釈エンジンに式言語記述を渡して解釈結果を受け
> 取るようになっていて、そのためのインタフェースが用意されていて、そのインタ
> フェースの実装クラスを作っておいてweb.xmlなどに「式言語の解釈にはこの実装ク
> ラスを使う」と記述することで式言語エンジンを容易に差し替え可能になるのだろ
> うと考えました。
> 
> ところが、Mayaが式言語を切り出す時点で入れ子記述を認識しないと、例えばMaya
> テンプレート中に
> 
>   <span m:inject="c:out" m:value="${(this#)${type}.name}">
> 
> などと書いた時は「${(this#)${type}」までしか切り出してくれないのではないか、
> そうであれば自分のやりたいことは実現できないのではないか、と考えたのです。
> これが例えば「{」と「}」のバランスを考慮して切り出してくれるですとか、「"」
> から「"」までの間を切り出してくれるですとか、そのようになっているのでしたら
> うれしいのです。
> 
> 返事は急ぎませんのでお時間が取れそうな時にご回答頂ければと思います。
> 
> それではよろしくお願いします。
> 
> --------
>   YOKOTA Takehiko
>     [E-MAIL ADDRESS DELETED]
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> http://lists.sourceforge.jp/mailman/listinfo/seasar-user






Seasar-user メーリングリストの案内