0

我在下面有这段代码:

<h:panelGrid id="formDatatable">
            <p:dataTable var="Resource" value="#{resource.listResourceForDataTable}">  
                <p:subTable var="access" value="#{resource.listResourceForSubTable}">
                    <f:facet name="header">
                        #{Resource.firstname} #{Resource.lastName}
                    </f:facet>
                    <p:column> 
                        #{access.skillLevel}
                    </p:column> 
                    <p:column>  
                        #{access.skillName}
                    </p:column>

                </p:subTable>
            </p:dataTable>  
        </h:panelGrid>

DataTable 的值:资源列表(带有字符串和映射的复杂对象)

在子表的值中:只有 2 个字段的资源列表:---> SkillLevel(字符串)和 SkillName(字符串)。

结果是(技能等级/技能名称):

http://www.gilawhost.com/images/dywyipz9.png

如您所见,它用我的子表列表中的所有元素填充“标题”。这不是我想要的,因为“albert first”(资源)已经学习了 java(技能)并且在 levelOfSkill 中有 2 个。他没有其他技能。

我想在我的桌子上有:

阿尔伯特第一:2 - java

迈克尔杰克逊:2-jee;3 - php

汤姆霍克斯:2-php;4 - 爪哇

但是我每次在每个标题中都拥有所有技能。我怎样才能“分离”数据?我认为 DataTable 和 SubTable 可以完成这项工作。

4

1 回答 1

0

成立。我不得不将我的地图“转换”成一个列表:

public List<Map.Entry<Skill, Niveau>> getSkillNiveauMap() {
    Set<Map.Entry<Skill, Niveau>> map = skillLevel.entrySet();        
    return new ArrayList<Map.Entry<Skill, Niveau>>(map);        
}

之后,我调用我需要的条目:

<p:dataTable id="resources" var="Resource" value="#{resource.listOfAllResources}">                  

                <p:subTable var="skill" value="#{Resource.skillNiveauMap}">  
                    <f:facet name="header">  
                        #{Resource.firstname}  #{Resource.lastName}   
                    </f:facet>

                    <p:column>
                        #{skill.key.title} 

                    </p:column>

                    <p:column>
                        #{skill.value.niveau}

                    </p:column>

                </p:subTable>

            </p:dataTable> 
于 2013-07-08T12:53:10.677 回答