[Seasar-user:18294] Re: [Fisshplate]括弧などを含むバインド変数の置換について

[E-MAIL ADDRESS DELETED]
2009年 8月 15日 (土) 21:57:50 JST


高橋様

コミッタの六です。

バインド変数の中でロジックというか、メソッド呼び出しをする
というのはまったく想定していませんでした。

出来れば、メソッド呼び出しで取得したい値は、#var と #exec で
変数に代入してそれを表示するようにして戴いた方がよいと思います。

というのは、ご指摘のあったバインド変数周りの実装なんですが
とてもごちゃごちゃしてまして、なぜかというと
「こんな感じで${hoge}を表示する」みたいにリテラルとバインド変数が
混在したものに値を埋め込むための苦肉の策みたいな感じなのです。

で、これも問題があって、数値や日付型のフォーマットが、
バインド変数のみであればセルの書式設定でどうにかなるのですが
上記のような混在の例だと制御出来なくなってしまうのです。

そのため、近い内にバインド変数の評価をOGNLではなく、
FreeMarkerに全部任せてしまおうと思っていました。

なのでFreeMarkerで

> ${data.list[0].value}
> ${data.list.get(0).value}
> ${data.list.size()}

こう云った書き方が出来ればOKなんですが
メソッド呼び出しは事前に #exec でやって戴くのが
堅いかな〜、と思います。

FreeMarker化は、前述の通り、バインド変数はプロパティ参照しか想定して
いなかったので、急いでやっても互換性に問題はないだろうと思っての
判断なのですが、もし不都合ありそうでしたら
0.1.4での反映は一旦見送りたいと思います。

どうでしょう?


2009/08/15 17:55 に Go Takahashi<[E-MAIL ADDRESS DELETED]> さんは書きました:
> こんにちは。高橋と申します。
>
> Fisshplateの業務での利用を検討しています。
>
> カスタムパーサもいい感じで動作し、ほぼ本命となっていますが、
> 一つ気になる点があります。
>
> Fisshplateのテンプレートのバインド変数はOGNLとして評価される…と
> オフィシャルドキュメントに記載されていましたので、以下のような
> メソッド呼び出しやインデックス参照(つまり括弧などを含む記述)も
> 可能だろうと思って試して見たのですが、置換されませんでした。
>
> ${data.list[0].value}
> ${data.list.get(0).value}
> ${data.list.size()}
>
> ちなみに、data.listはプレビュー機能を用いて生成したList要素です。
> なお、以下の記述ではきちんと要素数が表示されました。
>
> ${data.list.size}
>
> 余りテンプレートにロジックを埋め込むべきではないとは思うのですが、
> OGNLで展開した方が直感的というケースもあり、Fisshplateの対応方針
> 次第で今後の実装方法を検討するつもりでおります。
>
> バインド変数はあくまでOGNLのサブセット(つまりプロパティ参照のみ)
> という想定なのか、そうでないのか、コミッタの考えをお聞きできれば…
> と思っているのですが、いかがなものでしょうか?
>
> ちなみに、0.1.4-SNAPSHOT(rev.233) を使用しています。
>
> 蛇足ですが、ソースを追ってみたところ、
> org.seasar.fisshplate.core.element.Elでの処理が影響しているように
> 思います。El#putValueToMap(FPContext)でのOGNL式の評価では期待した
> 値が、El#expressionMapにputされていますが、buildValue() にて
> セルのバインド変数を評価結果に置換する際にスルーされているようです。
> 置換の際にString#replaceAll(String,String)を利用しているようですが、
> これに渡される正規表現を生成するStringUtil.escapeEl(String)が、
>
> $, {, }
>
> をエスケープしているものの、
>
> [, ], (, ), ... etc.
>
> はエスケープしていないため、置換されていない…というのが原因
> なのかなあ…と思ったりしています。
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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