Kolossus 提出了非常好的建议,但实际上很有可能它们都不会为您提供所需的数据表示。所以我提出第三种方法:稍微修改模型以适应您的视图需求。这样做是必要的,因为其中的每一行<p:dataTable>
都由列表中当前迭代的元素组成,并且该迭代是唯一的迭代。因此,为了实现您的功能,您应该通过基本上修改模型表示来在迭代元素中提供您需要的所有行信息。
其中一种方法是创建一个包含Country
和State
对象的附加类(或者您需要显示的字符串属性):
public class CountryState {
private Country country;
private State state;
}
为“即时”(或预先)迭代创建一个列表:
public List<CountryState> getCountryStates(List<Country> countries) {
List<CountryState> lst = new ArrayList<CountryState>();
for(Country country : countries) {
for(State state : country.getState()) {
lst.add(new CountryState(country, state);
}
}
return lst;
}
并在您的数据表中使用它:
<p:dataTable value="#{bean.countryStates}" var="cs">
<p:column headerText="Country name">
<h:outputText value="#{cs.country.name}" />
</p:column>
<p:column headerText="State name">
<h:outputText value="#{cs.state.name}" />
</p:column>
<p:column headerText="State code">
<h:outputText value="#{cs.state.code}" />
</p:column>
</p:dataTable>
<p:panelGrid>
或者,如果您想合并行/列,您可以考虑使用。