[Struts2] FreeMarker での JSP タグの利用
さきほど、FreeMarker でプロパティを表示する方法として、
${name}
と書いたが、struts のタグを利用して JSP で書くとすると、
<s:property value="name" />
となる。で、struts のタグは FreeMarker でも利用することができて、
<@s.property value="name" />
といった感じで表記できる。
では、FreeMarker で「${name}」と記載するのと「<@s.property value="name" />」と書くのがまったく同じかというとそうではない。struts タグの方はデフォルトの動作として HTML をエスケープしてくれるのに対して、「${name}」のほうは HTML をエスケープしてくれない。エスケープさせるためには、
${name?html}
と書くか、<#escape x as x?html>〜#escape> で囲み、
<#escape x as x?html> ${name?html} </#escape>
と書くかど、ちらかの方法をとれば良い。なんかエスケープ忘れで事故がおこりそうで怖いなあ。
あと、FreeMarker で struts タグ(
- JspSupportServret をロードしておく
- テンプレートで taglib を利用する宣言をする
一点目は、web.xml で以下の記述を追加する。
<servlet> <servlet-name>JspSupportServlet</servlet-name> <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
二点目は、テンプレートファイルに以下のような記述を行う。
<#assign foo=JspTaglibs["/WEB-INF/foo.tld"] />
これで、以下のような記述でタグを利用できる。
<@foo.bar>
まあ、このあたりは考え方が JSP の場合と似ているので理解しやすい。