我试图通过编写一个小的“树”组件来更好地掌握 JSF2 内部结构,该组件采用节点结构并将其呈现为简单的 ul/li 元素。
应该可以定义Way,叶子的内容渲染得有点像这样(类似于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);
}
}
}
}
为了简单起见,我首先开始使用一个简单的字符串数组列表并迭代地打印出内容。这是xhtml:
<custom:tree value="#{testBean.strings}" var="testdata">
<h:outputText value="#{testdata}" />
</custom:tree>
那么,实现这一目标的正确方法是什么?
最好的问候,克里斯蒂安·沃斯