将<c:foreach> <h:inputtext>绑定到List <string> </string> </h:inputtext> </c:foreach>

时间:2015-04-14 13:31:32

标签: jsf jsf-2 foreach

我希望使用一个或多个值来输入JSF inputText组件,然后将它们放在List中:

private List<String> stringList= new ArrayList<String>();

我想做这样的事情:

<c:forEach id="myData" items="#{documentController.listeColonnes}" var="address" varStatus="loop">
       <h:outputLabel value="#{address}" />
       <h:inputText value="#{documentController.stringList[loop.index]}"/>
 </c:forEach>

ListeColonnes有标签值(ID,prenom ....)

我想在新的arrayList()

中输入这个值(12,sam,....)

任何想法!

2 个答案:

答案 0 :(得分:0)

好的,我遇到了同样的问题,经过多次试验和错误后,我设法让它工作了。这是我的情况:

  1. 我想创建一个可以使用JSON配置的动态UI,因此获取该数据并将其放入名为property的类中。
  2. 之后,我需要收集用户提供的数据,以便将其存储在数据库中。
  3. 这是我的方法:

    JSF

    <h:form id="forma_po" styleClass="form-body" prependId="false">
        <c:forEach items="#{purchaseOrderPrinterBean.properties}" var="property">
            <p:outputLabel value="#{message_report[property.label]}:"/>
            <br/>
            <p:inputTextarea id="#{property.name}" rows="#{property.lines}"
                             cols="#{property.numberOfCharacters}" required="true"
                             maxlength="#{property.lines * property.numberOfCharacters}"
                             autoResize="false" rendered="#{property.type == 'TEXT_AREA'}"
                             value="#{purchaseOrderPrinterBean.values[property.name]}">
                <p:ajax event="change" listener="#{purchaseOrderPrinterBean.fieldValue}"/>
            </p:inputTextarea>
            <p:calendar id="popup_#{property.name}" rendered="#{property.type == 'DATE'}"
                        value="#{purchaseOrderPrinterBean.values[property.name]}" required="true"
                        pattern="#{property.format}" effect="slideDown">
                <p:ajax event="dateSelect" listener="#{purchaseOrderPrinterBean.fieldValue}"/>
            </p:calendar>
            <br/>
        </c:forEach>
    </h:form>
    

    正如您所看到的,如果用户以前保存过任何数据,我会在valuep:inputTextarea上使用p:calendar属性显示该数据,此purchaseOrderPrinterBean.values[property.name]当然是java.util.HashMap<String, Object>字段,我遇到的问题是当用户提供或更改信息时,值字段根本没有更新,因此<p:ajax />内的p:inputTextarea标记}和p:calendar

    在豆子里我有这个:

    public void fieldValue(AjaxBehaviorEvent e) {
        if (e.getSource() instanceof UIInput) {
            UIInput input = (UIInput) e.getSource();
            Object value = input.getValue();
            String id = input.getId();
            if(StringUtils.startsWith(id, "popup_")) {
                id = StringUtils.remove(id, "popup_");
            }
            values.put(id, value);
        }
    }
    

    这是我发现的唯一一个让它工作的案例,一个警告案例,我不知道为什么,但我不得不将前缀'popup_'放到日历中,否则我的重复ID会出错。 希望它有所帮助,并原谅我的英语不好。

答案 1 :(得分:-2)

试试这个

<ui:repeat value="#{documentController.listeColonnes}" var="address" varStatus="loop">
       <h:outputLabel value="#{address}" />
       <h:inputText value="#{documentController.stringList.get(loop.index)}"/>
    </ui:repeat>