JSFで複合コンポーネントを作成して利用する
JSFでは、複数のコンポートを束ねて切り出して1つのコンポーネントとして扱うことができます。
何度も同じように使用される部分を切り出して、再利用できたら便利ですよね?
前回のやつから投稿したレスの部分を複合コンポーネントにしてみます。
<ui:repeat var="respon" value="#{responseBean.responseList}" > <div> <h:outputText value="#{respon.name}"/> <h:outputText value="#{respon.mail}"/> <h:outputText value="#{respon.body}"/> </div> </ui:repeat>
この部分です。
いきなりrepeat含めて、まとめるのはなんか怖いので、(てかオブジェクトを渡せるか謎) ちきってdiv要素を切り出します。。。。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:composite="http://java.sun.com/jsf/composite" > <composite:interface> <composite:attribute name="name"/> <composite:attribute name="mail"/> <composite:attribute name="body"/> </composite:interface> <composite:implementation> <div> <h:outputText value="#{name}"/> <h:outputText value="#{mail}"/> <h:outputText value="#{body}"/> </div> </composite:implementation> </html>
こんな感じのコンポーネントを定義します。 置き場所はリソースにcompフォルダを作って配置します。
利用する側はこうなります。
<ui:repeat var="respon" value="#{responseBean.responseList}" > <comp:respons name="#{respon.name}" mail="#{respon.mail}" body="#{respon.body}"/> </ui:repeat>
これで動かします。
・・・・・
本当にあってるのでしょうか?
エラー、、、出ていますが
ものはためしに動かしてみましょう。
知ってた。
resourceフォルダに読み込めてないみたいですね。 白猫本を見ると以下のように記載してありました。
コンポジットコンポーネント は、 画像 や CSS ファイル などと 同様 に resources フォルダ に 配置 し て 利用 し ます。
あ、入れてるresouce違いました。
次のように修正します。
これで一回、動かしてみます。
エラーは解消されました。
なんも出なくなりましたが。
div要素は追加されて行ってるので、 うまいことデータが渡せっていないっぽいです。 今日はここまでで、次回、このエラー解消したいと思います。
追記
普通にcc.attrつけるの忘れてました。
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:composite="http://xmlns.jcp.org/jsf/composite" > <composite:interface> <composite:attribute name="name"/> <composite:attribute name="mail"/> <composite:attribute name="body"/> </composite:interface> <composite:implementation> <div> <h:outputText value="#{cc.attrs.name}"/> <h:outputText value="#{cc.attrs.mail}"/> <h:outputText value="#{cc.attrs.body}"/> </div> </composite:implementation> </html>