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

Yokota Takehiko takehiko
2004年 12月 6日 (月) 11:34:09 JST


横田です。

返信が遅くなってすみません。このMLには会社からしか入っていないもので…。

On Wed, 01 Dec 2004 21:23:34 +0900
Masataka Kurihara <[E-MAIL ADDRESS DELETED]> wrote:

>   ということは
> 
> > はい、この方式でも私の用途には十分です。重要なのは、「{」「}」の入れ子
> > をきちんと認識する、という点ですので、そこだけMaya側でサポートしていた
> > だければ大丈夫そうです。
> 
>   ですよね?了解しました。

よろしくお願いします。ちなみに今書いていて思ったのですが、栗原さんの元
メールでは

> >   ジャストアイディアですが、私の提案する解決策は、式言語を、
> > 
> > ${(this#)#{type}.name}
> > ${(this#)@{type}.name}
> > ${(this#){type}.name}
> > 
> > という風に書くことです。「#{  }」じゃなく「@{  }」でも、単に「{  }」でも
> > いいです。Mayaは${ }で囲まれているところを式言語としますので、
> > 「{  }」のネストだけをきちんとみれば、切り出すELは
> > 
> > (this#)#{type}.name
> > 
> > となります。あとは、#{  } を式言語エンジンのほうで対応いただくことで
> > できるかと思います。

ということだったのですが、仮に#{ }ではなく${ }を使って
  ${(this#)${type}.name}
と書いた場合はエラーになるようになるのでしょうか。それとも一度「${」が見つ
かった後は「{」「}」の入れ子を見るだけなので「#{」があろうが「${」があろう
が同じ扱いで式言語エンジンには「(this#)${type}.name」が渡されるのでしょう
か。

> ${ out.println(${type}.name) }
> 
> というのがあったとして、
> 
> 1)typeを評価。値を取得して、evaluated_typeと名づけエンジンに設定
> 2)式の${type}を#evaluated_typeと置き換える。OGNLでは頭に「#」がつくと
>   変数です。
> 3)out.println(#evaluated_type.name)を評価する。
> こういう作業をループで行うものを作れば式言語をサポートしていなくても
> 大丈夫。エンジンラッパー内部でダイナミックに変数追加できる仕組みを
> 実装しておけばOK。

OGNLは詳細を知らないのですが、上記の機能があると便利なケースがあるかも
しれませんね。ところで${type}の評価結果の利用方法としては栗原さんがおっ
しゃるような(1)評価結果のオブジェクト自体を埋め込む方法、の他に、(2)評
価結果の文字列(文字列でない場合はtoString()する)を直接埋め込む方法、が
考えられます。

うまく言えませんが、例を挙げると、${type}の評価結果のオブジェクトが
・getName()が「NAME」という文字列を返す
・toString()が「#var」という文字列を返す
ようなオブジェクトである場合、out.println(${type}.name)の評価結果は(1)
の場合は
  out.println(#evaluated_type.name) -> "NAME" を印字
となりますが、(2)の場合は
  out.println(#var.name) -> #varのnameプロパティの値を印字
となります。自分が想定していたのは実は(2)の方なのです。ただし、このあた
りの評価(このあたりの評価、というのは、式言語中に埋め込まれた「子」式
言語を解釈して、解釈結果から埋め込み元の「親」式言語を再構築し、再構築
した式言語を解釈する処理を指します)を行なうのが式言語エンジン(のラッ
パ)であれば、(1)(2)のどちらでもラッパを書きさえすれば対応可能になるの
で問題ないと思います。

ちょっと話はそれましたが、結局のところ、

> 仕様
> として出すところは、${  }の囲いを、「{」と「} 」の対応関係で切り出すこと
> だけで、デフォルトのOGNLの実装でネスト構造をカバーしたのは伏せると
> 思います。

ということで、${ }の囲いを{ }の対応関係で切り出すところ以外は式言語エンジ
ン(のラッパ)側で対処するという形態でいけそうですね。ありがとうございます。

> > なるほど。ちょっと思ったのですが、なぜMayaではMayaが解釈する式言語
> > の指定をJSP仕様と同じ${...}にしたのでしょうか。ぱっと考えた感じでは、
> > JSFの#{...}のように、別の指定方式にした方が上記の「評価に関する問題」
> > は避けやすいと感じたのですが、何か理由があるのでしょうか。(ひょっと
> > してMaya仕様書に書いてあったかもしれませんが読み流してしまったかも。)
(略)

この件に関して丁寧なご説明ありがとうございました。参考になりました。

--------
  YOKOTA Takehiko
    [E-MAIL ADDRESS DELETED]




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