SAStrutsのf:h()をSpringタグ・JSTLタグで置き換えたい
seasar2 → Springにコンバートする際に
SAStrutsタグ・ファンクションをSpringタグorJSTLタグに置き換える必要がありました。
f:h()を置き換える際にちょっと苦戦したので備忘録として書いておきます。
f:h()とは?
使い方はここを参照してください。
クロスサイトスクリプティング対策でエスケープする必要がある場合に使用します。
JSTLタグで置き換え
下記のように基本的にはc:outで置き換えてやればよいと思います。
1 |
${f:h(hoge)} |
↓
1 |
<c:out value="${hoge}"/> |
c:outの使い方はここを参照してください。
特殊なケース
特殊なケースの例を提示します。
1 2 |
<c:when test="${f:h(hoge) == 1}"> <c:if test="${f:h(hoge) == 'ほげ'}"> |
こんな風にcタグのtest属性の判定条件にf:h()が使用されている場合、
先ほどの置き換えでは問題が発生します。
c:whenタグやc:ifタグのtest属性内にc:outタグを使用するとエラーが発生してしまうのです。
正直サニタイジングする意味がないであろう部分ではありますが、
お客様の強い要望でf:hと同等の処理を付与しなければいけません。
ではどうするか?
特殊なケースの解決策
JSTLタグのfn:escapeXmlタグを使用します。
1 |
<c:if test="${fn:escapeXml(hoge) == 'ほげ'}" > |
こんな感じでOKです。
まとめ
seasar2 → Springにコンバートする案件ってどのくらいあるのでしょう。
あんまりなさそうな気がします。
そう考えると需要がうっすい記事かもしれませんね。
誰かの参考になれば幸いです。
ディスカッション
コメント一覧
まだ、コメントがありません