如何将<ui:repeat>内的<h:inputtext>的提交值设置为map,set或list </ui:repeat> </h:inputtext>

时间:2013-08-13 07:50:01

标签: jsf input-field uirepeat

我想知道是否可以将<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>

3 个答案:

答案 0 :(得分:3)

使用Set时,不可能,因为它不允许按索引或键引用项目。但是,只需在输入值中指定列表索引和映射键,就可以使用ListMap


使用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>

注意应该是规范的方法是使用List全值的javabeans。让我们假设一个名为Par的Javabean类,其属性idvalue完全映射到DB中的par表,列idvalue

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:即可将其打开。

答案 1 :(得分:1)

如果我理解你的要求,我不确定。 我想如下:你需要一些后端的字符串列表和一个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到字符串大小的整数列表。

答案 2 :(得分:0)

你的意思是这样吗?

<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
}

}