2

我想知道是否可以将 a 内部的值推<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>
4

3 回答 3

3

使用 a Set,这是不可能的,因为它不允许通过索引或键引用项目。但是,只需在输入值中指定列表索引和映射键,就可以使用 aList和 a 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>

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

应该注意的是,规范的方法是使用List完全值得的 javabean。让我们假设一个Par以属性命名的 Javabean 类idvalue它精确地映射到parDB 中的一个表,其中的列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:将其打开。

于 2013-08-13T11:24:35.220 回答
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 到字符串的大小。

于 2013-08-13T10:50:53.967 回答
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
}

}
于 2013-08-13T07:55:24.617 回答