struts-tile vs ColdFusion

お題:画面から共通のテンプレートへ値を渡す
全画面に共通のヘッダーがあって、タイトルだけ指定したい。そんな要求を実現するのに随分と時間を食ってしまいました。でも実現できたので良しとします(笑)

struts-config.xml
<plug-in className="org.apache.struts.tiles.TilesPlugin" >
    <set-property property="definitions-config" 
                  value="/WEB-INF/tiles-defs.xml" />
    <set-property property="moduleAware" value="true" />
</plug-in>

tiles-defs.xml
<definition name="headerLayout" path="/template/common_header.jsp" />

common_header.jsp
<tiles:getAsString name="title" />

xxxx.jsp
<tiles:insert definition="headerLayout">
    <tiles:put name="title" value="タイトルだよ〜" />
</tiles:insert>

※HTML部分などは省略。コアなコードのみ抜粋

なるほど。すごく簡単だったorz
ColdFusionの場合と比べると、値の渡し方がしっかりしてるんで困惑しちゃったようです。CondFusionの場合を考えると

  • common_header.cfmを作る
  • CFMファイルに<cf_common_header title="タイトルだよ〜"/>と書く
  • cf_page_header.cfm側で、titleを取得するには、Attributes.titleで参照できる。
common_header.cfm
#Attributes.title#

xxxx.cfm

  • つまり、カスタムタグはファイル名から拡張子を取った名称をタグで書くだけで呼び出せる。
  • カスタムタグのファイルパスや属性を定義する必要が無い
  • テンプレート側では「Attributes.属性名」で参照できる。

と、やたら定義する事が無くてとっても簡単に実現できます。この動きは好き嫌いがあると思いますが、とーっても簡単に実現できます。属性が多くなって嫌だなぁと思ったらStrutsのputタグみたいにネストすることもできますし、渡すものはオブジェクトでもなんでもOKです。ColdFusionのこの親切さは時にはがゆいかもしれませんが、私は楽ができているので大好きです(^^)

#追記:まとめ

  • ColdFusionは定義が必要ない、引数の渡し方は属性で指定
  • Strutsは定義が必要、引数の引渡しはタグをネストさせる

大した違いは無いってことですね(苦笑)