2013-03-14 65 views
3

与PrimeFaces上的动态表内容斗争& dataTable。 目标是动态地呈现表列标题&内容。JSF PrimeFaces动态数据表地图

这里是我的豆代码:

@ManagedBean(name="treeBean") 
@SessionScoped 
public class TreeBean implements Serializable { 
    private static Logger log = Logger.getLogger(TreeBean.class); 
    private static final long serialVersionUID = 1L; 
    private List<TableColHeader> tableColHeaderList; 

    /** Project-specific data structure. One list entry per one table row, Integer in Map is number of column */ 
    private List<Map<Integer,String>> tableContent; 

    public TreeBean() { 
     tableColHeaderList=MockedDataProvider.getDemo1ColHeaderList(); 
     tableContent=MockedDataProvider.getDemo1TableContent();  
     log.info("TreeBean started"); 
    } 

    public int getTableColHeaderIndex(TableColHeader tableColHeader) { 
     return tableColHeaderList.indexOf(tableColHeader); 
    } 

    public List<TableColHeader> getTableColHeaderList() { 
     return tableColHeaderList; 
    } 

    public void setTableColHeaderList(List<TableColHeader> tableColHeaderList) { 
     this.tableColHeaderList = tableColHeaderList; 
    } 

    public List<Map<Integer,String>> getTableContent() { 
     return tableContent; 
    } 

    public void setTableContent(List<Map<Integer,String>> tableContent) { 
     this.tableContent = tableContent; 
    } 

    public List<Integer> getTableContentIdKeysAsList(int id){ 
     return new ArrayList<Integer>(tableContent.get(id).keySet()); 
    } 
} 

TableColHeader.java - 为模型:

public class TableColHeader { 
    private String propertyUri; 
    private String label; 
    private String unitLabel; 
    private String unitUri; 
//getters,setters,equals,hashCode.. 
} 

这里是我的JSF页面的dataTable代码:

<p:dataTable id="queryResults" var="tableContentVar" value="#{treeBean.tableContent}">            
    <p:columns value="#{tableBean.tableColHeaderList}" var="column" > 
    <f:facet name="header"> 
    #{column.label} 
    </f:facet>      
    <h:outputText value="#{tableContentVar.values().toArray()[treeBean.getTableColHeaderIndex(column)]}" /> 
    </p:columns>              
</p:dataTable> 

我已经请阅读有关空columnIndexVar值的问题,作为https://code.google.com/p/primefaces/issues/detail?id=4449,但从bean获取索引也无济于事。

我只看到dataTable应该在的地方,也没有例外。 有什么想法吗?

使用Primefaces 3.5 & JBoss 7.1.1.Final。

+1

凡'tableContentMap'和'tableContentVar'界定? – ClydeFrog 2013-03-14 09:32:45

+0

@Sergii你应该写'tableContentVar'? – partlov 2013-03-14 09:34:10

+0

谢谢,我正在检查它.. – Sergii 2013-03-14 09:36:31

回答

0

感谢@partlov,这里的错误是引用了tableBean而不是在JSF代码中的treeBean

因此,这里是工作代码:

<p:dataTable id="queryResults" var="tableContentVar" value="#{treeBean.tableContent}" >            
    <p:columns value="#{treeBean.tableColHeaderList}" var="column" > 
    <f:facet name="header"> 
    #{column.label} 
    </f:facet>      
    <h:outputText value="#{tableContentVar.values().toArray()[treeBean.getTableColHeaderIndex(column)]}" /> 
    </p:columns>              
</p:dataTable>