JSPのJSTLとJSFの混在 - Unified EL(Expression Language)
JSFだけでJSPを書いていると、JSPのタグも使いたくなることがあります。今回maznがやりたいと思ったことは、JSFで複数のテーブルを繰り返し出力させる方法です。
単一のテーブルならばJSFのタグ( <h:dataTable>)を使って簡単に作成できますが、さらにこのテーブルを以下のように複数作りたい時に、JSFだけのタグだとうまくいきません。
| 名前 | hogehoge |
| 年齢 | 21 |
| 性別 | 男 |
| 名前 | gehogeho |
| 年齢 | 45 |
| 性別 | 女 |
そこで少し調べて見たところ、JavaEE5からのJSP2.1とJSF1.2からサポートされているUnified-EL (Unified Expression Language)で簡単に実現できました。
JSPはEL式を”${ … } “と、JSFでは “#{ … }”と書きます。JavaEE5からはこの二つを混ぜることができます。つまり複数テーブルを出したい場合はJSTLの<c:forEach>タグを使ってループさせ、中でJSFのタグを使って以下のような感じで複数テーブルを作成することができます。
<c:forEach item="#{personManagedBean.datas}" value="data">
<table>
<tr><td>名前</td><td><h:outputText value="#{data.name}"/></td></tr>
<tr><td>年齢</td><td><h:outputText value="#{data.old}"/></td></tr>
<tr><td>性別</td><td><h:outputText value="#{data.sex}"/></td></tr>
</table>
</c:forEach>
※なにも見ずに書いたので間違ってるかも
personManagedBeanというマネージドビーンのdatasはList型で、1テーブルに必要なデータが複数入っています。この中の1データをdataという変数で取り出し、JSFの<h:outputText>で内容を出力しています。今回は<table>を使っていますが、<h:dataTable>でも動くと思います。
ちなみにJBoss4.2のJSP, JSFは対応しています。