我希望使用一个或多个值来输入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,....)任何想法!
答案 0 :(得分:0)
好的,我遇到了同样的问题,经过多次试验和错误后,我设法让它工作了。这是我的情况:
这是我的方法:
<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>
正如您所看到的,如果用户以前保存过任何数据,我会在value
和p: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>