如何将<ui:repeat> 中的 <h:inputText> 的提交值设置为映射、设置或列表



我想知道是否可以将<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,这是不可能的,因为它不允许按索引或键引用项。然而,对于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(仅当您的环境支持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类,具有属性idvalue,它精确地映射到DB中具有列idvaluepar表:

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

相关内容

  • 没有找到相关文章

最新更新