ノード構造を取り、それを単純なul/li要素にレンダリングする小さな「ツリー」コンポーネントを作成することにより、JSF2の内部をよりよく理解しようとしています。
ウェイを定義できるはずです。リーフのコンテンツは次のようにレンダリングされます (h:DataTable に似ています)。
<custom:tree value="#{someBean.someListProperty}" var="nodeData">
<h:outputText value="#{nodeData}" />
...
</custom:tree>
現在、その変数を現在のコンテキストに「入力」する方法を理解するのに苦労しています。私はこのようなことを試みましたが、うまくいきませんでした:
@Override
@SuppressWarnings("unchecked")
public void encodeChildren(FacesContext context) throws IOException {
if ((context == null)){
throw new NullPointerException();
}
ArrayList<String> list = (ArrayList<String>) getStateHelper().eval("value");
String varname = (String) getStateHelper().eval("var");
if(list != null){
for(String str : list){
getStateHelper().put(varname, str);
for(UIComponent child: getChildren()){
child.encodeAll(context);
}
}
}
}
簡単にするために、最初に文字列の単純な ArrayList を使用し、内容を繰り返し出力することから始めました。ここにxhtmlがあります:
<custom:tree value="#{testBean.strings}" var="testdata">
<h:outputText value="#{testdata}" />
</custom:tree>
では、これを達成する正しい方法は何でしょうか?
クリスチャン・ヴォス