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

Go Takahashi [E-MAIL ADDRESS DELETED]
2009年 8月 15日 (土) 17:55:38 JST


こんにちは。高橋と申します。

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 メーリングリストの案内