- PR -

JSF:子コンポーネントに値を渡す方法について

1
投稿者投稿内容
sakura
会議室デビュー日: 2004/11/03
投稿数: 3
投稿日時: 2004-11-03 15:57
dataTableタグなどで利用されている
var="item" value="#{itemList}"
などの属性記述を使い子のコンポーネントから
<h:outputText value="#{item.name}"/>
等というようにアクセスしたいために
カスタムコンポーネントを利用したいのですが
どのように記述すればよいのかがわかりません

今現在やっていることは
dataTableに相当するmyListCompタグで
<my:myListComp value="#{itemList}">
<h:outputText value=""/>
</my:myListComp>
というように書いておいて
myListのレンダラクラスのencodeChildrenメソッド内で
//引数:FacesContext ctx
//引数:UIComponent comp
UIMyListComp myListComp=(UIMyListComp)comp;
java.util.List list = (java.util.List)myListComp.getValueBinding("value").getValue(ctx);
UIOutput outText=(UIOutput)myList.getChildren.get(0);
for(int i=0;i<list.size();i++){
outText.setValue(((MyBean)list.get(i)).getName());
outText.encodeBegin(ctx);
outText.encodeChildren(ctx);
outText.encodeEnd(ctx);
}
というようにしているのですが
<h:outputText value=""/>
↑このように必須項目なので、空にしておかないといけないのが気持ち悪いです

var="item" value="#{itemList}"
としたときにこのitemの値を#{itemList}の1番目、2番目というように
順番にバインドしたいのですが
この方法がわかりません
教えてください
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2004-11-22 14:43
こんにちは.亀レスですが,

for文の中で,
getFacesContext().getExternalContext().getRequestMap().put(var, getRowData())
のようなことをすれば良いと思います.
UIDataはこれをやっています.

カスタムコンポーネントを全部自作するのではなく,UIDataのようなものをスーパークラスにして作るのが賢いと思いますよ.
1

スキルアップ/キャリアアップ(JOB@IT)