Jsf 仅在h:dataTable的第一行中呈现贴图键
我一直在搜索如何使用c:forEach显示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
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>