我想知道是否可以将<ui:repeat>
内部的值推送到映射、集合或列表?
我想把<h:inputtext>
的值传递给一个集合。
代码:
<ui:repeat var="_par" value="#{cmsFilterParameterHandler.normaleSuchParameter()}">
<p:outputLabel value="#{_par.bezeichnung}" />
<p:spacer width="5px" />
<p:inputText id="me" value="#{??? push me to a set ???}"/>
<br /><br />
</ui:repeat>
对于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
(仅当您的环境支持EL 2.2或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中具有列id
和value
的par
表:
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:
即可将其打开。
我不确定,我是否正确理解了您的需求。我假设如下:您需要在某个后端中使用一个字符串列表和一个ui:repeat
标记来迭代那些带有输入字段的字符串以编辑它们。也许有一些语法问题,但我的想法应该很清楚:
public class Backend {
private List<String> myStrings;
public MyStringWrapper getMyStringWrapper(int index) {
return new MyStringWrapper(index);
}
public class MyStringWrapper {
private final int index;
public MyStringWrapper(int index) { this.index = index; }
public String getContent() { return myStrings.get(index); }
public void setContent(String newContent) { myStrings.add(index, newContent); }
}
}
在前端,您使用如下:
<ui:repeat var="_index" value="#{backend.getIndexSequence()}">
<p:inputText value="#{backend.getMyStringWrapper(_index).content}"/>
</ui:repeat>
当然,您必须提供一个getIndexSequence方法,该方法生成从0到字符串大小的int列表。
你是这样的意思吗?
<p:inputText id="me" value="#{_par.input}"/>
在BackBean中:
public class Par implements Serializable {
private String inputText;
private String bezeichnung;
public Par()
{
}
public void setInput(String input)
{
this.inputText = input;
}
public String getInput()
{
return this.inputText
}
public void setBezeichnung(String bezeichnung)
{
this.bezeichnung = bezeichnung;
}
public String getBezeichnung()
{
return this.bezeichnung
}
}