关于 rich:columns
<rich:dataTable value="#{cols.count}">
<rich:columns value="#{cols.header}" var="header">
<f:facet name="header">
<h:outputText value="#{header}"/>
</f:facet>
<h:outputText value="#{cols.data[header].name}"/>
</rich:columns>
</rich:dataTable>
@Name("cols")
public class Cols {
public Map<String,Data> getData(){
Map<String,Data> result = new LinkedHashMap<String,Data>();
result.put("一", new Data("张三","111"));
result.put("二", new Data("李四","222"));
result.put("三", new Data("王五","333"));
return result;
}
public List<Object> getCount(){
return Arrays.asList(new Object[getData().size()]);
}
public static class Data{
String name;
String age;
public Data(String name, String age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
public List<String> getHeader(){
return Arrays.asList(new String[]{"一","二","三"});
}
}
注意,首先对于一个dataTable,必须有 value ,且 value的size决定显示的行数,所以<rich:dataTable value=""> 是必须的,作用是确定要显示的行数,var不是必须的,因为可能用不到
其次 rich:columns 一般需要和header或footer关联,所以其中数据最好为map或者数组(richfaces的demo用的是数组),其中 有index="" 属性表示数据
再补充几点
1.rich:columns是在jsf最后阶段解析成rich:column的,它没有后台对应的jsf组件类(即没有HtmlColumns这个类)
2.对于需要rich:columns的地方也可以用<c:forEach>里面套用<rich:column>解决
3.rich:columns里面的style和styleClass其实是对于里面的每个rich:column起作用的,可以用来动态的改变column的style