Struts Tag
最終的にHTMLを表示するViewレイヤーでは、Actionクラスのデータやセッションで保持する情報にアクセスすることが不可欠です。Struts 2では、カスタムタグ(Struts Tag)を用いて、そのようなデータを扱うことになります。
またStruts Tagには、それ以外にも、フォームなどのユーザーインターフェイスのタグ(UIタグ)や、条件判定を行うタグ、さらにはJavaScriptが組み込まれたAjax機能のタグもあります。
3つのテンプレートエンジン
Struts 2では、JSPに加え、「freemarker」や「velocity」といった3つのテンプレートエンジンに対応しており、Struts Tagも3つのテンプレートで使用することができます。Struts Tagは、基本的にViewの実装とは切り離されており、テンプレートの文法によって若干書式が異なるだけで、同じように使えます。
なお、JSPの標準的なカスタムタグであるJSTLもサポートしていますが、EL式には対応していません。そのため、EL式固有の表記を使用することはできませんので、OGNL式で記述する必要があります。
以下、Struts Tagsを表にまとめています。タグの個別の詳細については、Struts 2のドキュメントを参照してください。
UIタグ
UIタグは、その名の通りユーザーがデータを操作するタグで、checkboxやselectといった通常のHTMLタグを拡張したものが中心です。UIタグの特徴的な機能の一つに、連載第2回目の記事でもふれた「テーマ」機能があります。FreeMarkerのテンプレート機能を組み合わせて、コントロールを「テーマ」に従ってレンダリングすることができる機能です。
| タグ名 | 説明 |
| checkbox | <input type="checkbox">と同じ |
| combobox | コンボボックス(テキストボックス+プルダウンメニュー) |
| form | HTMLタグと同じ |
| hidden | <input type="hidden">と同じ |
| password | <input type="password"> と同じ |
| select | HTMLタグと同じ |
| textarea | HTMLタグと同じ |
| radio | <input type="radio">と同じ |
| reset | <input type="reset">と同じ |
| submit | <input type="submit">と同じ |
| textfield | <input type="text">と同じ |
| head | HEADタグ内でthemeの指定などを行う時に使用 |
| optiontransferselect | 2つのセレクトボックスで連携処理を行う |
| optgroup | セレクトボックスのグループ分け表示 |
| token | Submitのダブルクリック防止用 |
| updownselect | セレクトボックスの要素を上下移動させる |
| doubleselect | 連携動作する2つのセレクトボックス |
| file | ファイルアップロード用 |
| checkboxlist | 複数のチェックボックスを作成 |
| label | 文字列表示 |
| タグ名 | 説明 |
| actionerror | エラー表示用のメッセージ |
| actionmessage | Actionオブジェクトのメッセージ表示 |
| component | テンプレート定義用 |
| div | HTMLのタグと同じ |
| fielderror | 入力エラーを表示 |
| タグ名 | 説明 |
| a | XMLHttpRequestを呼び出す |
| autocompleter | 入力補完機能 |
| bind | イベント待ち処理 |
| datetimepicker | カレンダーを表示した日付選択 |
| div | XMLHttpRequestを呼び出す |
| tree | ツリー構造の表示 |
| treenode | |
| tabbedpanel | タブ形式のページ表示 |
ただ、標準のxhtmlテーマは、コントロールをTableタグで配備したりするので、昨今のWebレイアウトには合わない部分も少なくないでしょう。テンプレートを自作したりして、テーマをカスタマイズすることはできますが、テンプレートの変更は面倒な場合が多くて不便です。もう一つの方法として、Tilesプラグインの利用を検討した方がよいかもしれません。「Tiles」とは、複数のJSPファイルを1枚のWebページに合成する機能です。Webページのヘッダーやフッターなど、共通して使う部分を独立して定義することができます。
その他UIタグには、Ajaxタグなど便利そうなものもありますが、かゆいところに手が届かないものも多く、状況に応じて利用することが肝要です。
汎用タグ
汎用タグは、Struts 2のドキュメントの分類では、制御タグとデータタグに分かれています。
| タグ名 | 説明 |
| if | 条件判定を行う |
| elseIf | |
| else | |
| append | 複数の要素リストを連結する |
| generator | iteratorタグで処理できる要素を生成する |
| iterator | 要素リストから、ひとつずつ要素を取り出す |
| merge | 複数の要素リストを合成する |
| sort | 要素をソートする |
| subset | 要素リストの一部分を切り出す |
| タグ名 | 説明 |
| a | HTMLのタグと同じ |
| action | Actionを呼び出す |
| bean | JavaBeansの生成 |
| date | 日付表示 |
| debug | Value Stack(内部データ)の表示 |
| i18n | メッセージリソースの変換 |
| include | JSPファイルなどの呼び出し |
| param | struts.xmlの<param>タグを読み出す |
| property | オブジェクトのプロパティを参照する |
| push | Value Stack(内部データ)にデータを格納 |
| set | 変数に値をセットする |
| text | 国際化に対応した文字列表示 |
| url | URLの生成 |
制御タグは、結果として返すHTMLにはまったく現れないタグです。条件判定を行ったり、内部のデータを操作するものです。
データタグには、変数の表示など何らかの結果をレスポンスのHTMLで利用するもの、Actionを呼び出したりするものがあります。
