对于Set,这是不可能的,因为它不允许通过索引或键引用项目。但是,只需在输入值中指定列表索引和映射键,就可以使用 List 和 Map。
List:
private List<String> list; // +getter (no setter necessary)
@PostConstruct
public void init() {
list = createAndFillItSomehow();
}
<ui:repeat value="#{bean.list}" varStatus="loop">
<h:inputText value="#{bean.list[loop.index]}" />
</ui:repeat>
使用Map(仅当您的环境为supports EL 2.2 or JBoss EL):
private Map<String, String> map; // +getter (no setter necessary)
@PostConstruct
public void init() {
map = createAndFillItSomehow();
}
<ui:repeat value="#{bean.map.entrySet().toArray()}" var="entry">
<h:inputText value="#{bean.map[entry.key]}" />
</ui:repeat>
应该注意的是,规范的方法是使用完全值得的 javabeans 的List。让我们假设一个名为Par 的Javabean 类具有id 和value 属性,它精确映射到DB 中的par 表,列id 和value:
private List<Par> pars; // +getter (no setter necessary)
@PostConstruct
public void init() {
pars = createAndFillItSomehow();
}
<ui:repeat value="#{bean.pars}" var="par">
<h:inputText value="#{par.value}" />
</ui:repeat>
无论哪种方式,在使用<p:inputText> 时效果都很好,它与 PrimeFaces 没有任何关系,它在这个问题的上下文中只是一个基于 jQuery 的 JSF UI 组件库。只需将h: 替换为p: 即可打开它。