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