从here开始我遇到以下问题:
我正在生成一个随机数量的表单字段(它不是随机的,但用户可以随时更改它们的数量)并且我想将所有这些信息保存在Managed Bean ArrayList
属性中。 / p>
<ui:repeat var = "ctr" value = "#{controller.tipCounter}">
<h:outputLabel for = "tip" value = "#{appMessage['form.tip']} ##{ctr} :" />
<h:inputText id = "tip" value="#{controller.tipList}" maxlength="100" />
</ui:repeat>
在控制器中我有以下属性:
private List<String>tipList;
//Get+Set
除了一些不受欢迎的行为(映射此列表的所有表单字段都以[]
作为其值),抛出此警告:
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=fm-story:j_idt60:0:tip[severity=(ERROR 2), summary=(Conversion Error setting value '' for 'null Converter'.), detail=(Conversion Error setting value '' for 'null Converter'.)]
sourceId=fm-story:j_idt60:1:tip[severity=(ERROR 2), summary=(Conversion Error setting value '' for 'null Converter'.), detail=(Conversion Error setting value '' for 'null Converter'.)]
答案 0 :(得分:1)
您收到转化错误,因为您尝试将提交的String
值设置为List<String>
属性,因为该属性没有标准转换器且您尚未声明任何转换器。
毕竟,你不应该需要任何一个。这种语法根本不正确。您需要将String
值绑定到String
属性。您需要通过索引引用列表。我也不确定为什么你需要2个清单。 tipCounter
似乎完全没必要。
这是重写:
<ui:repeat value="#{controller.tipList}" var="tip" varStatus="loop">
<h:outputLabel for="tip" value="#{appMessage['form.tip']} ##{loop.count} :" />
<h:inputText id="tip" value="#{controller.tipList[loop.index]}" maxlength="100" />
</ui:repeat>
您可能还想在循环中添加<h:message for="tip" />
。