Jsf 仅在h:dataTable的第一行中呈现贴图键

Jsf 仅在h:dataTable的第一行中呈现贴图键,jsf,datatable,Jsf,Datatable,我一直在搜索如何使用c:forEach显示Map。我试图按字母顺序打印单词列表,并在同一行中显示一次键,而不是ArrayList中的第一个元素 A Apple Arpa Adverb 地图上的签名是: private Map<String, ArrayList<String>> procedures; 干杯您需要在内部渲染它,而不是在外部渲染它。只需将渲染贴图键的移回即可 <c:forEach items="#{obj.procedures}" va

我一直在搜索如何使用c:forEach显示
Map
。我试图按字母顺序打印单词列表,并在同一行中显示一次键,而不是ArrayList中的第一个元素

A Apple
  Arpa
  Adverb

地图上的签名是:

private Map<String, ArrayList<String>> procedures; 

干杯

您需要在
内部渲染它,而不是在外部渲染它。只需将渲染贴图键的
移回
即可

<c:forEach items="#{obj.procedures}" var="entry">
    <h:dataTable value="#{entry.value}" var="foo">
        <h:column>#{entry.key}</h:column>
        <h:column>#{foo}</h:column>
    </h:dataTable>
</c:forEach>
然后,为了让它只显示在第一行中,只需检查表的当前行索引是否等于0。你可以通过咨询得到它。您可以从
内部通过
{component.namingContainer}
表达式访问父级
,这是一个
UIData

<c:forEach items="#{obj.procedures}" var="entry">
    <h:dataTable value="#{entry.value}" var="foo">
        <h:column><h:outputText value="#{entry.key}" rendered="#{component.namingContainer.rowIndex eq 0}" /></h:column>
        <h:column>#{foo}</h:column>
    </h:dataTable>
</c:forEach>

顺便说一下,对于空格和边框,使用CSS
margin
padding
border
,而不是不间断的空格或分隔符组件。它使您的标记变得不必要的臃肿,维护也不友好。

您在问题中发布了大量代码,这使我们(以及未来的读者)不清楚问题的确切位置。请将问题代码减少到10行或更少。请参阅:和。为什么这个更改只显示每个字母的C单词列表?并显示为水平而不是垂直?因为它使用了而不是,我忽略了重要的一点。请参阅更新的答案。
A 
  Apple
  Arpa
  Adverb
_________________
B 
  Background
  Ball
  Ballad
    ...
<c:forEach items="#{obj.procedures}" var="entry">
    <h:dataTable value="#{entry.value}" var="foo">
        <h:column>#{entry.key}</h:column>
        <h:column>#{foo}</h:column>
    </h:dataTable>
</c:forEach>
<c:forEach items="#{obj.procedures}" var="entry">
    <h:dataTable value="#{entry.value}" var="foo">
        <h:column><h:outputText value="#{entry.key}" rendered="#{component.namingContainer.rowIndex eq 0}" /></h:column>
        <h:column>#{foo}</h:column>
    </h:dataTable>
</c:forEach>